java 按位置格式化字符串_Java字符串格式化,{}占位符根据名字替换实例
我就废话不多说了,大家还是直接看代码吧~
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringFormatUtil {
private static final Pattern pattern = Pattern.compile("\\{(.*?)\\}");
private static Matcher matcher;
/**
* 格式化字符串 字符串中使用{key}表示占位符
*
* @param sourStr
* 需要匹配的字符串
* @param param
* 参数集
* @return
*/
public static String stringFormat(String sourStr, Map param) {
String tagerStr = sourStr;
if (param == null)
return tagerStr;
try {
matcher = pattern.matcher(tagerStr);
while (matcher.find()) {
String key = matcher.group();
String keyclone = key.substring(1, key.length() - 1).trim();
Object value = param.get(keyclone);
if (value != null)
tagerStr = tagerStr.replace(key, value.toString());
}
}catch (Exception e){
return null;
}
return tagerStr;
}
/**
* 格式化字符串 字符串中使用{key}表示占位符 利用反射 自动获取对象属性值 (必须有get方法)
*
* @param sourStr 需要匹配的字符串
*
* @return
*/
public static String stringFormat(String sourStr, Object obj) {
String tagerStr = sourStr;
matcher = pattern.matcher(tagerStr);
if (obj == null)
return tagerStr;
PropertyDescriptor pd;
Method getMethod;
// 匹配{}中间的内容 包括括号
while (matcher.find()) {
String key = matcher.group();
String keyclone = key.substring(1, key.length() - 1).trim();
try {
pd = new PropertyDescriptor(keyclone, obj.getClass());
getMethod = pd.getReadMethod();// 获得get方法
Object value = getMethod.invoke(obj);
if (value != null)
tagerStr = tagerStr.replace(key, value.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
// Loggers.addException(e);
}
}
return tagerStr;
}
/**
* 格式化字符串 (替换所有) 字符串中使用{key}表示占位符
*
* @param sourStr
* 需要匹配的字符串
* @param param
* 参数集
* @return
*/
public static String stringFormatAll(String sourStr, Map param) {
String tagerStr = sourStr;
if (param == null)
return tagerStr;
try {
matcher = pattern.matcher(tagerStr);
while (matcher.find()) {
String key = matcher.group();
String keyclone = key.substring(1, key.length() - 1).trim();
Object value = param.get(keyclone);
if (value != null)
tagerStr = tagerStr.replace(key, value.toString());
}
}catch (Exception e){
return null;
}
return tagerStr;
}
/**
* 格式花字符串,按照占位符名字
* 输入:sourStr = xxxxx{a}xxxx{b} ,param = {a:A,b:B}
* 输出:targetStr = xxxxAxxxxB
* @param sourStr
* @param param
* @return
*/
public static String stringFormat(String sourStr, JSONObject param) {
String tagerStr = sourStr;
if (param == null)
return tagerStr;
try {
matcher = pattern.matcher(tagerStr);
while (matcher.find()) {
String key = matcher.group();
String keyclone = key.substring(1, key.length() - 1).trim();
Object value = param.get(keyclone);
if (value != null)
tagerStr = tagerStr.replace(key, value.toString());
}
}catch (Exception e){
return null;
}
return tagerStr;
}
public static void main(String[] args) {
// Map map = new HashMap<>();
// map.put("id","111");
// map.put("sss","ss");
// JSONObject json = new JSONObject();
// json.put("id","212");
// json.put("fff","xxxx");
// json.put("emmmmm",11);
// stringFormat("sisas&{fff}_diwahwi%{id}{jio}",json);
}
}
补充知识:java中占位符的使用
二话不说,先上代码
package com.string.format;
public class StringFormat {
//占位符%s,拼接sql,删除两个表中的数据,条件是字符串数组类型的id
public static void formSql(String tableName,String tableName2,String...strings){
//sql占位符 %s占位符
String sql="delete from %s,%s where id in (%s)";
//声明新的字符串
String sqls="";
//遍历字符串的参数数组
for (String str : strings) {
//将参数数组拼接成字符串,用逗号分割
sqls += str + ",";
}
//拼接最后会多出个逗号,截取
sqls=sqls.substring(0, sqls.length()-1);
//format第一个sql参数为目标字符串,tableName,tableName2,为替换的两表的名字,sqls为删除数据的参数集合
String s=String.format(sql, tableName,tableName2,sqls);
//输出拼接后的sql
System.out.println(s);
}
public static void main(String[] args) {
//传入参数为指定表名,和参数值
StringFormat.formSql("user","role", "1","3","5","7","9","33");
}
}
其实,传入的参数是数组类型的 值,我们也可以按array[0],array[1]的方式插入参数,只是参数个数应用不灵活,还是使用数组的方式取值比较好,
public static void format(){
String st="%s的%s的价格是%f,是否售罄%c,占总销售的%d%%,库存%d,是否为畅销品%b";
String s=String.format(st, "58优品","啤酒",3.5,'是',50,199,true);
System.out.println(s);
}
public static void main(String[] args) {
//传入参数为指定表名,和参数值
//StringFormat.formSql("user","role", "1","3","5","7","9","33");
format();
}
public static void format(){
//String st="%s的%s的价格是%f,是否售罄%c,占总销售的%d%%,库存%d,是否为畅销品%b";
//String s=String.format(st, "58优品","啤酒",3.5,'是',50,199,true);
//System.out.println(s);
SimpleDateFormat simple=new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
String newDate=simple.format(new Date());
String st1="%s的%s的价格是%s,是否售罄%s,占总销售的%s%%,库存%s,是否为畅销品%s,当前日期为%s";
String ss=String.format(st1, "58优品","啤酒","3.5",'是',"80","998","true",newDate);
System.out.println(ss);
}
public static void main(String[] args) {
//传入参数为指定表名,和参数值
//StringFormat.formSql("user","role", "1","3","5","7","9","33");
format();
}
/*%S字符串类型的占位符
* %c字符类型的占位符
* %b布尔类型的占位符
* %d整数类型的占位符
* %%百分比类型的占位符
* %n换行类型的占位符
* %t时间类型的占位符
* c全部的日期时间类型
* F年-月-日格式
* D年/月/日格式
* rHH:MM:SS格式12小时制
*
*/
以上这篇Java字符串格式化,{}占位符根据名字替换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持站圈网。
java 按位置格式化字符串_Java字符串格式化,{}占位符根据名字替换实例相关推荐
- java 填充字符串_Java字符串右补齐——String.format
Java字符串右补齐方法: System.out.println(String.format("%-4s", "ab")); //"%-4s" ...
- java tostring格式化日期_java日期格式化SimpleDateFormat的使用详解
日期和时间格式由 日期和时间模式字符串 指定.在 日期和时间模式字符串 中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素.文本可以使用单引 ...
- java字符串_Java字符串
java字符串 Java String is one of the most widely used class. Java String class is defined in java.lang ...
- java处理字符串_Java 字符串常用操作(String类)
字符串查找 String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法. 1.indexOf(String s) 该方法用于返回参数字符串s在指定字符串中首次出现的索引位置, ...
- [Java]_[初级]_[使用正则高效替换字符串的多个占位符为多个值]
场景 在开发基于模板内容的Java程序时, 比如一个邮件内容模板,在内容里放置一些占位符$email,$name等来作为替换实际内容的符号.那么这时候如何做才可以少生成不必要的String字符串,从而 ...
- java POI导出多张图片到表格(占位符方式)
最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的 ...
- java 千分位格式话_Java 字符串小数转成千分位格式
java中需要将字符串小数转成千分位格式显示,如下代码,原理是使用正则表达式对整数位进行千分位格式化,然后小数位拼接起来.为什么要这么麻烦的处理,是因为在android程序中使用的NumberForm ...
- java按特殊标志截取_java 字符串分割处理split及特殊符号
String类型的对象在 用split()方法进行字符分割的时候常常会遇到用特殊字符进行分割的情况,看JDK知道split()实际上是用的正则实现的分割,当遇到一些用特殊 字符作为分割标志的时候,不使 ...
- java连接字符串_Java字符串连接运算符
Java字符串连接运算符 在java语言中所有的字符串都使用半角双引号括起来的,字符串属于引用数据类型,不属于基本数据类型的范畴,怎么定义一个字符串的变量呢?例如:String name = &quo ...
最新文章
- JAVA设计模式-策略模式
- reactor使用方法_Project Reactor展开方法
- Oracle 21C 新特性:数据泵相关新特性汇总
- VUE3 Router路由
- 【教学类-10-02】20221025《空心图案4*2-不重复》( 随机图案拼贴)(大班主题《动物花花衣》)
- php程序的运行方法
- 区块链火了 市场热度最么高
- cmake导入so库_使用CMake引入第三方so库及头文件
- Apache虚拟主机配置
- Hazelcast是什么
- SwiftUI OCR功能大全之 基于 SwiftUI 构建文档扫描仪
- 扩展访问:Uber Lite App开发始末
- PDF格式分析(六十六) Text 文字——简单字体
- 《卸甲笔记》-单行函数对比之二
- JIRA6.3安装及alige插件破解
- 你想不到,韩国女团最喜欢的英文单词是这些
- 【VSCode PlatformIO】STC8系列SDCC专用头文件内容分享
- linux分区如何4k对齐,Linux如何进行无损修复4K对齐?
- 项目实战分享-大数据时代-航空公司该如何转型(四)
- python dtype=float 是32还是64_【Python】numpy数组用dtype=float16初始化的坑
热门文章
- 【渝粤题库】陕西师范大学800001 自然地理学
- 浅谈蓝牙“嗅探”功能设计
- java 所有子类_java 查找类的所有子类
- setitimer 创建两个定时器_UE4 Timer(定时器)相关源码分析
- python网站数据写入mysql_python网络爬虫抓取动态网页并将数据存入数据库MySQL
- 用ajax写无限循环,ajax无限循环
- android封装oauth2,Android AccountAuthenticator和OAuth2
- 电机与拖动,直流他励电动机的特性测试实验报告,江南大学自动化
- java如何替换字符串0A_我有一个带有“ \ u00a0”的字符串,我需要将其替换为“” str_replace failed...
- 2020-08-14 光纤通信第三章知识点整理