数据格式是:
{@}name:=name1{@}old:=20{@}sex:=nan
要求1、
获取old:=后面的内容20
返回结果:20
要求2、
获取sex:=后面的内容nan
返回结果:nan
要求3、
获取old:=后面的内容20换成100
返回结果:{@}name:=name1{@}old:=100{@}sex:=nan
要求4、
获取sex:=后面的内容nan换成nv
返回结果:{@}name:=name1{@}old:=20{@}sex:=nv麻烦了啊。
{@}name:=name1{@}old:=20{@}sex:=nan
要求1、
获取old:=后面的内容20
返回结果:20
要求2、
获取sex:=后面的内容nan
返回结果:nan
要求3、
获取old:=后面的内容20换成100
返回结果:{@}name:=name1{@}old:=100{@}sex:=nan
要求4、
获取sex:=后面的内容nan换成nv
返回结果:{@}name:=name1{@}old:=20{@}sex:=nv麻烦了啊。
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {
public static void main(String[] args) {
String str = "{@}name:=name1{@}old:=20{@}sex:=nan";
String regex = "old:=(\\d+).*sex:=(\\w+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
String old = matcher.group(1);
String sex = matcher.group(2);
System.out.println("Old:=" + old + ", Sex:=" + sex);
}
}
}
public class Test {
public static void main(String[] args) {
String str = "{@}name:=name1{@}old:=$1{@}sex:=$2"; // 使用分组来替换
String re = "100na"; // 使用来替换的字符串
String result = re.replaceAll("(\\d+)(\\w+)", str); // 替换的结果
System.out.println(result);
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {
public static void main(String[] args) {
String src = "{@}name:=name1{@}old:=20{@}sex:=nan";
String result = replace(src, "100", "na");
System.out.println(result);
} /**
* @param src 原来的字符串
* @param old 新替换的old
* @param sex 新替换的sex
* @return
*/
public static String replace(String src, String old, String sex) {
Pattern pattern = Pattern.compile("name:=(\\w+)");
Matcher matcher = pattern.matcher(src);
String name = "";
// 先从原来的字符串中把名字提取出来
if (matcher.find()) {
name = matcher.group(1);
} // 用分组来进行替换
String str = "{@}name:=$1{@}old:=$2{@}sex:=$3";
String replaceStr = name + "{@}" + old + "{@}" + sex;
String result = replaceStr.replaceAll("(\\w+)\\{@\\}(\\d+)\\{@\\}(\\w+)", str); return result;
}
}
代码如下
供参考
String s = "{@}name:=name1{@}old:=20{@}sex:=nan";
String regex = "(\\{@\\}name:=)(.+)(\\{@\\}old:=)(.+)(\\{@\\}sex:=)(.+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
String old = matcher.group(4);
String sex = matcher.group(6);
System.out.println("old:=" + old + ", sex:=" + sex);
}
s = s.replaceAll(regex, "$1$2$3100$5nv");
System.out.println(s);
小弟研究过正则几天,最恼火的就是表达式的书写了~~~
但楼上的问题为何不用String类,非要用正则呢,个人认为,String类简单易用,且不用正则那样费力去匹配、查找,如下:
public static void main(String[] args)
{
String str = "{@}name:=name1{@}old:=20{@}sex:=nan";
String key_old = "{@}old:=";
String key_sex = "{@}sex:=";
int index1 = str.indexOf(key_old);
int index2 = str.indexOf(key_sex);
String old_str = str.substring(index1 + key_old.length(), index2);//查找
System.out.println(old_str);
str = str.replace(old_str, "100");//替换
System.out.println(str);
}
{@}name:=name1{@}old:=20{@}sex:=nan比如, {@}name:=name1{@}old:=20{@}sex:=nan{@}xxx:=xx但是格式都是{@}xxx:= 注等号后面可能为空其实我就是想
1、可以获取 {@}xxx:=
等号后面的数值,
2、可以替换{@}xxx:=
等号后面的数值,比如:
{@}任意:=数值
1、能获取上面格式的“数值”
2、能替换上面格式的“数值”
对不起大家乐 55555555555555555555努力过正则是在没搞明白啊!
{@}name:=name1{@}old:=20{@}sex:=nan 比如, {@}name:=name1{@}old:=20{@}sex:=nan{@}xxx:=xx 但是格式都是{@}xxx:= 注等号后面可能为空 其实我就是想
1、可以获取 {@}xxx:=
等号后面的数值,
2、可以替换{@}xxx:=
等号后面的数值,
比如:
{@}任意:=数值
1、能获取上面格式的“数值”
2、能替换上面格式的“数值”
对不起大家乐 55555555555555555555努力过正则是在没搞明白啊!
{@}name:=name1{@}old:=20{@}sex:=nan 比如, {@}name:=name1{@}old:=20{@}sex:=nan{@}xxx:=xx 但是格式都是{@}xxx:= 注等号后面可能为空 其实我就是想
1、可以获取 {@}xxx:=
等号后面的数值,
2、可以替换{@}xxx:=
等号后面的数值,
比如:
{@}任意:=数值
1、能获取上面格式的“数值”
2、能替换上面格式的“数值”
对不起大家乐 55555555555555555555努力过正则是在没搞明白啊!
public static void main(String[] args) {
String str = "{@}name:=name1{@}old:=20{@}sex:=nan";
Pattern pattern = Pattern.compile("}(([^:]+):=([^\\{]+))\\{?",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = pattern.matcher(str);
String replaceStr = "替换str";
while (m.find()) {
//在这里想换哪个换哪个
if ("old".equals(m.group(2))) {
System.out.println(m.group(1).replaceAll(m.group(3), replaceStr));
} else {
System.out.println(m.group(2) + "#" + m.group(3));
}
}
}
import java.util.regex.Pattern;public class Temp { public static void main(String[] args) {
String str = "{@}name:=name1{@}name:=20{@}name:=nan{@}xxx:=xx";
String reg = "(@\\}.*?:=)(.*?)\\{";
str = str+"{";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
String replaceStr;
String afterReplace=str;
while (matcher.find()) {
replaceStr = matcher.group(2);
System.out.println(replaceStr);
}
afterReplace = str.replaceAll(reg, "$1***");//把找到的东西都替换为***,这个根据你自己需要
System.out.println(afterReplace); }
}
:+后面的xx,但是你这个会把前面的3个xxx中也替换掉2个
你可以看一下楼主发上来的字符串哦
{@}name:=name1{@}old:=20{@}sex:=nan
明显":=" 前面的是key,后面的是value
如果是多组数据在一起的话,
不会是{@}name:=name1{@}name:=20{@}name:=nan{@}xxx:=xx"
而是{@}name:=name1{@}old:=20{@}sex:=nan{@}name:=name1{@}old:=20{@}sex:=nan{@}name:=name1{@}old:=20{@}sex:=nan....
这样把
old:= *** 的替换,会有什么问题
public static void main(String[] args) {
String str = "{@}name:=name1{@}old:=20{@}sex:=nan";
Pattern pattern = Pattern.compile("}(([^:]+):=([^\\{]+))\\{?",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = pattern.matcher(str);
String replaceStr = "替换str";
while (m.find()) {
//在这里想换哪个换哪个
if ("name".equals(m.group(2))) {
System.out.println(m.group(1).replaceAll(m.group(3), replaceStr));
} else {
System.out.println(m.group(2) + "#" + m.group(3));
}
}
}
把红的那里改一下,就是你要换的,你可以自己试一下
而且发现没用{@}控制啊就用了:=这样有一定风险啊
我表达能力不好啊,在说下。希望能说明白啊。对不起大家了:我的数据格式是类似: .......{@}name:=name1{@}old:=20{@}sex:=nan........
但是没准有多少个啊,即可能是{@}name:=name1{@}old:=20{@}sex:=nan也可能有些数据是
{@}stature:=178{@}name:=name1{@}old:=20{@}sex:=nan{@}class:=class1{@}avoirdupois:=100不过不管多少个格式都是{@}filed:=value其实我需要的是,两个方法一个方法是,传入filed就能返回给我这个filed对应的数值,
一个方法就是我给filed和值,就能把数据里的那个filed的数值换成我需要的那个值。
我表达能力不好啊,在说下。希望能说明白啊。对不起大家了: 我的数据格式是类似: .......{@}name:=name1{@}old:=20{@}sex:=nan........
但是没准有多少个啊,即可能是{@}name:=name1{@}old:=20{@}sex:=nan也可能有些数据是
{@}stature:=178{@}name:=name1{@}old:=20{@}sex:=nan{@}class:=class1{@}avoirdupois:=100 不过不管多少个格式都是{@}filed:=value 其实我需要的是,两个方法一个方法是,传入filed就能返回给我这个filed对应的数值,
一个方法就是我给filed和值,就能把数据里的那个filed的数值换成我需要的那个值。