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]的方式插入参数,只是参数个数应用不灵活,还是使用数组的方式取值比较好,

785e858986e757d7d156450986bf72cb.png

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();

}

540b149049b816f0f5450351342d5a9c.png

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();

}

4b9723fe1298e9b4da42b348f98da2ad.png

/*%S字符串类型的占位符

* %c字符类型的占位符

* %b布尔类型的占位符

* %d整数类型的占位符

* %%百分比类型的占位符

* %n换行类型的占位符

* %t时间类型的占位符

* c全部的日期时间类型

* F年-月-日格式

* D年/月/日格式

* rHH:MM:SS格式12小时制

*

*/

以上这篇Java字符串格式化,{}占位符根据名字替换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持站圈网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dropzone.js实现文件拖拽上传

dropzone.js是一个开源的JavaScript库&#xff0c;提供 AJAX 异步文件上传功能&#xff0c;支持拖拽文件、支持最大文件大小、支持设置文件类型、支持预览上传结果&#xff0c;不依赖jQuery库。 查看演示 下载源码使用Dropzone 我们可以建立一个正式的上传form表单&#xff0c;…

java 获取系统时间 8小时 jre_Java获取时间与系统时间相差8小时终极解决方案

0、引言Druid中时区的问题一直困扰着我们&#xff0c;所以我专门去研究了一下世界时区和Java中的时区&#xff0c;对使用Druid很用帮助.1、UTC时间&GMT时间UTC时间是时间标准时间(Universal Time Coordinated)&#xff0c;UTC是根据原子钟来计算时间&#xff0c;误差非常小…

Apache Drill 1.4性能增强的简要概述

今天&#xff0c;我们很高兴宣布Apache Drill 1.4现已在MapR发行版中可用。 钻1.4是MAPR生产就绪和支持的版本&#xff0c;可以从下载这里 &#xff0c;找到1.4版本说明这里 。 Drill 1.4以其高度灵活和可扩展的体系结构为基础&#xff0c;带来了多种新功能以及对查询性能的增…

【01背包】洛谷P1282多米诺骨牌

题目描述 多米诺骨牌有上下2个方块组成&#xff0c;每个方块中有1~6个点。现有排成行的 上方块中点数之和记为S1&#xff0c;下方块中点数之和记为S2&#xff0c;它们的差为|S1-S2|。例如在图8-1中&#xff0c;S161119&#xff0c;S2153211&#xff0c;|S1-S2|2。每个多米诺骨牌…

java geolitecity_GeoLite2 Java根据IP获得城市、经纬度

之前我们介绍过通过 qqwry.dat 根据IP获得所属城市和运营商信息。但是这个 qqwry.dat 已经太久没更新了&#xff0c;数据有些不准确&#xff0c;而且现在我们有个需求就是想获取某个IP所在的经纬度。这里我们可以使用 GeoLite2&#xff0c;这个是国外开源的一个库&#xff0c;需…

Leetcode:search_insert_position

一、 题目 给定一个数组和要插入数的大小。求插入的位置。 二、 分析 太水&#xff0c;直接扫描。过……. class Solution { public:int searchInsert(int A[], int n, int target) {for(int i0;i<n;i) {if(target<A[i]) {return i;} }return n;} };转载于:https…

java mvc 面试题_2018年java技术面试题整理

1、servlet执行流程客户端发出http请求&#xff0c;web服务器将请求转发到servlet容器&#xff0c;servlet容器解析url并根据web.xml找到相对应的servlet&#xff0c;并将request、response对象传递给找到的servlet&#xff0c;servlet根据request就可以知道是谁发出的请求&…

交叉编译指定运行时库路径_运行时vs编译时类路径

交叉编译指定运行时库路径这确实应该是一个简单的区别&#xff0c;但是我一直在回答有关Stackoverflow的许多类似问题&#xff0c;并且经常有人误解此事。 那么&#xff0c;什么是类路径&#xff1f; 应用程序所需的一组所有类&#xff08;以及带有类的jar&#xff09;的集合。…

计算机专业英语第二版张强华翻译_计算机语言发展的三个阶段,机器语言、汇编语言与高级语言...

在如今信息发达的时代&#xff0c;科技日新月异&#xff0c;计算机和Internet网络的发展也成为人们日常生活的重要部分。学习一两门计算机编程语言也如当初学习英文一样的火热&#xff0c;随着人工智能AI和云计算的不断发展&#xff0c;Python语言和Scala语言已经成为这两个领域…

java netty html_源码时代JAVA干货分享|带你用Netty框架实现WebSocket通信

功能介绍Netty开发服务器HTML实现客户端实现服务端与客户端时实时交互开发步骤1.导包io.nettynetty‐all5.0.0.Alpha22.工程配置文件&#xff1a;NettyConfig/*** 这里放的是工程中相应的配置*/public class NettyConfig{/*** 用于存储每一个客户端接入进来时的channel对象*/pu…

使用Apache Drill REST API通过Node构建ASCII仪表板

Apache Drill有一个隐藏的瑰宝&#xff1a;易于使用的REST接口。 该API可用于查询&#xff0c;分析和配置Drill引擎。 在此博客文章中&#xff0c;我将说明如何使用Brilled Contrib使用Drill REST API创建ascii仪表板。 ASCII仪表盘如下所示&#xff1a; 先决条件 Node.js …

mysql+cast+0x_mysql cast与convert 函数的用法

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值&#xff0c;并产生另一个类型的值。两者具体的语法如下&#xff1a;CAST(value as type);CONVERT(value, type);就是CAST(xxx AS 类型), CONVERT(xxx,类型)。可以转换的类型是有限制的。这个类型可以是以下值其中的一个&a…

影子场vs.属性访问器接口第2轮

如果你们还没有注意到Dirk Lemmerman和我之间的&#xff08;轻松&#xff09; 对决 &#xff0c;那么让我快速提及一下我们是如何做到这一点的。 首先&#xff0c;Dirk创建了JavaFX技巧23&#xff1a;“ 为属性保存内存阴影字段 ”&#xff0c;以帮助应用程序开发人员在使用Jav…

java wmi远程桌面服务器_WMI实现远程监控多台windows服务器

简介WMI简介&#xff1a;WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术&#xff1b;用户可以使用 WMI 管理本地和远程计算机。WQL简介&#xff1a;WQL就是WMI中的查询语言&#xff0c;WQL的全称是WMI Query Language&#xff0c;简称…

如何:在Spring中使用@Conditional和Condition注册组件

Spring中的Profile批注可以用于任何自动检测候选的Spring组件&#xff08;例如&#xff0c; Service Component&#xff0c; Service Component &#xff0c; Service Configuration等&#xff09;。 Profile批注接受单个配置文件或一组必须是活动的配置文件&#xff0c;以使带…

java joda_java-Jodatime的开始时间和结束时间

对于那些来这里寻找“ js-joda”答案的人&#xff0c;您有两种选择&#xff0c;具体取决于要完成的工作选项1&#xff1a;您希望同一时区的一天开始由于您已选择根据与时区相关的即时时间来计算时间&#xff0c;因此应使用ZonedDateTime&#xff1a;import { ZonedDateTime, Lo…

Lowest Common Ancestor of a Binary Search Tree a Binary Tree

235. Lowest Common Ancestor of a Binary Search Tree 题目链接&#xff1a;https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/#/description 题目大意&#xff1a;给定一棵二叉查找树和两个节点p和q&#xff0c;要求返回这两个节点的第一个公共…

perl java_与Perl相比Java性能问题

我已经编写了一个Perl代码来处理大量CSV文件并获取输出,这需要0.8326秒才能完成.my $opname $ARGV[0];my files find . -name "*${opname}*.csv";mtime -10 -type f;my %hash;foreach my $file (files) {chomp $file;my $time $file;$time ~ s/.*\~(.*?)\..*/$1/…

controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

Spring中涉及的设计模式总结&#xff0c;在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型&#xff0c;具体详细的刨析会在后面的文章发布&#xff0c;话不多说&#xff0c;来个转发、在看、收藏三连…

我个人的CRUD故事-或我如何来到CUBA平台

在此博客文章中&#xff0c;我想介绍一下我如何使用CUBA平台以及此工具的好处。 在我年轻的“业务应用程序开发”历史上&#xff0c;我将深入探讨不同的阶段&#xff0c;只为您提供一些背景知识。 因此&#xff0c;让我们从如何进入典型的CRUD应用程序开始&#xff0c;以帮助非…