求一字符串替换的正则表达式,字符串类似“香蕉->水果->香蕉”,“桃子->水果->桃子”的字符串
替换为“香蕉->水果->好吃”,“桃子->水果->好吃”,
就是前后有相同字符的,保留前一个,把后一个都替换成统一的字符串。
谢谢,
替换为“香蕉->水果->好吃”,“桃子->水果->好吃”,
就是前后有相同字符的,保留前一个,把后一个都替换成统一的字符串。
谢谢,
解决方案 »
- Java mysql 登录啊啊啊
- 急!如何通过JS判断两个日期之间的差值?
- 急!在线等,struts1.2标签和hibernate 问题
- JSP把做好的WEB工程布署到网上服务器的步骤?
- 谁可以帮个忙,急中
- 我的学习笔记——基础报表制作3
- 开发web应用难于上青天,web开发十八难
- 你微笑时好美这是HTML编码,如何用Java转码回字符串呢?
- 救命,为什么最简单的过滤器也没有发生作用
- 《Programming Jakarta Struts》的下载地址,要下快下
- webservice调用?急急急......
- action跳转到jsp页面后的执行问题。
估计你要把$1换掉,是不是\1的,在java里面的反向引用跟perl不一样
public static void main(String[] args) {
String str="香蕉->水果->香蕉,桃子->水果->桃子";
System.out.println(str.replaceAll("(.+?)->(.+?)->\\1","$1->$2->好吃"));
}
替换为“香蕉->水果->好吃”,“桃子->水果->好吃”,
就是前后有相同字符的,保留前一个,把后一个都替换成统一的字符串。
谢谢,
再详加说明下,字符串是固定的,就是“桃子->水果->桃子”格式的,替换时要求两头的字符串一样,而且中间的字符是水果。
如果没有规则正则,只能写代码判断了。
class ReadFileTest
{
public static void main(String[] args)
{
BufferedReader br = null;
File f = new File(".\\test.txt");
try
{
br = new BufferedReader(new FileReader(f));
String temp = "";
String type = "";
while ((temp = br.readLine())!=null)
{
if (temp.matches("^[\\d\\D]*#@$"))
{
type = temp.replaceAll("^([\\d\\D]*)#@$","题型:$1");
continue;
}
temp = temp.replaceAll("#","").replaceAll("^(\\d+)",type+"\n题目:$1");
System.out.println(temp);
}
}
catch (Exception e)
{
System.out.println("error");
}
}
}这个是一个正则替换的java代码。希望可以参考下。$1指正则表达式里面第一个小括号里面的内容()依此类推
例如:
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。‘\1’是后向引用用于重复搜索前面某个分组匹配的文本,代表分组1匹配的文本。请看示例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。
这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),
这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。$1,$2分别代表前面正则中用()括起来的第一个和第二个位置
public static void main(String[] args)
{
String temp="香蕉->水果->香蕉www,桃子->水果->桃子";
System.out.println(temp.replaceAll("(.+?)->(.+?)->\\1","$1->$2->好吃"));
}
result:香蕉->水果->好吃www,桃子->水果->好吃
public static void main(String[] args)
{
String temp="香蕉->水果->香蕉www,桃子->水果->桃子";
System.out.println(temp.replaceAll("(.+?)->(.+?)->\\1$","$1->$2->好吃"));
}
result:香蕉->水果->香蕉www,桃子->水果->好吃
public class TestSplit { public static void main(String args[]) {
String str = "香蕉->水果->香蕉"; System.out.println(getSplit(str)); } public static String getSplit(String str) { String end_str = "";
String[] _str = str.split("->");
if (_str[0].equals(_str[_str.length - 1])) {
_str[_str.length - 1] = "好吃";
} for (int i = 0; i < _str.length; i++) {
if (i == _str.length - 1)
end_str += _str[i];
else
end_str += _str[i] + "->";
}
return end_str;
}
}