java 字符串替换处理方法
2014-08-02 15:42
190 查看
刚刚遇到一个问题,需要处理一个字符串,要求是把指定结构中的某些字符串替换掉。例如:
String str="确诊/v 30/m 例/q ,/wd 其中/rz 死亡/vi 5/f 例/n ,/wd 治愈/v 出院/vi 3/n 例/n ",这是个汉语言分词标注结果,现在我想要对该结果做一些修正,该标注结果中,像“30、5、3”这些数词标注的结果不一样,这不便于处理,因此需要统一起来。于是:
需求:将数字后面的"/英文字母"统一换成”数字/m“的形式。
这个看似简单的过程却困扰了本菜鸟一上午的时间,首先想到正则,匹配 数字 + / + 字母 组合,表达式很好写:[0-9]+ / [a-z]。可是匹配到之后我就不知道怎么处理了,我要保留之前的数字,只替换斜杠后面的字母。一开始我是先用num=matcher.group(1)获取前面的数字,然后替换后面的字母。
word = matcher.group(1);
str = str.replace("([0-9]+)/[a-z]*", word + "/m");
功能无法实现,replace函数只替换一个,replaceAll也没用,全部替换的话前面的数字不一样。
于是去搜了一下发现java中还有两个字符串替换函数:appendReplacement(StringBuffer sb,string replacement)和appendTail(StringBuffer sb)
appendReplacement(StringBuffer sb, String replacement)
将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个 StringBuffer 对象里,而 appendTail(StringBuffer sb) 方法则将最后一次匹配工作后剩余的字符串添加到一个 StringBuffer 对象里。
例如,有字符串 fatcatfatcatfat, 假设既有正则表达式模式为"cat",第一次匹配后调用 appendReplacement(sb,"dog"), 那么这时 StringBuffer sb 的内容为 fatdog,也就是 fatcat 中的 cat 被替换为 dog 并且与匹配子串前的内容加到 sb 里,而第二次匹配后调用 appendReplacement(sb,"dog"),那么 sb 的内容就变为 fatdogfatdog,如果最后再调用一次 appendTail(sb), 那么 sb
最终的内容将是 fatdogfatdogfat。
于是代码如下:
处理结果:确诊/v 30/m 例/q ,/wd 其中/rz 死亡/vi 5/m 例/n ,/wd 治愈/v 出院/vi 3/m 例/n
String str="确诊/v 30/m 例/q ,/wd 其中/rz 死亡/vi 5/f 例/n ,/wd 治愈/v 出院/vi 3/n 例/n ",这是个汉语言分词标注结果,现在我想要对该结果做一些修正,该标注结果中,像“30、5、3”这些数词标注的结果不一样,这不便于处理,因此需要统一起来。于是:
需求:将数字后面的"/英文字母"统一换成”数字/m“的形式。
这个看似简单的过程却困扰了本菜鸟一上午的时间,首先想到正则,匹配 数字 + / + 字母 组合,表达式很好写:[0-9]+ / [a-z]。可是匹配到之后我就不知道怎么处理了,我要保留之前的数字,只替换斜杠后面的字母。一开始我是先用num=matcher.group(1)获取前面的数字,然后替换后面的字母。
word = matcher.group(1);
str = str.replace("([0-9]+)/[a-z]*", word + "/m");
功能无法实现,replace函数只替换一个,replaceAll也没用,全部替换的话前面的数字不一样。
于是去搜了一下发现java中还有两个字符串替换函数:appendReplacement(StringBuffer sb,string replacement)和appendTail(StringBuffer sb)
appendReplacement(StringBuffer sb, String replacement)
将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个 StringBuffer 对象里,而 appendTail(StringBuffer sb) 方法则将最后一次匹配工作后剩余的字符串添加到一个 StringBuffer 对象里。
例如,有字符串 fatcatfatcatfat, 假设既有正则表达式模式为"cat",第一次匹配后调用 appendReplacement(sb,"dog"), 那么这时 StringBuffer sb 的内容为 fatdog,也就是 fatcat 中的 cat 被替换为 dog 并且与匹配子串前的内容加到 sb 里,而第二次匹配后调用 appendReplacement(sb,"dog"),那么 sb 的内容就变为 fatdogfatdog,如果最后再调用一次 appendTail(sb), 那么 sb
最终的内容将是 fatdogfatdogfat。
于是代码如下:
String word = null; Pattern pattern = Pattern.compile("([0-9]+)/[a-z]+"); Matcher matcher = pattern.matcher(str); StringBuffer sb=new StringBuffer(); while (matcher.find()) { word = matcher.group(1); matcher.appendReplacement(sb, word + "/m"); } matcher.appendTail(sb); return sb.toString();
处理结果:确诊/v 30/m 例/q ,/wd 其中/rz 死亡/vi 5/m 例/n ,/wd 治愈/v 出院/vi 3/m 例/n
相关文章推荐
- Java替换字符串中的“\"”的处理方法(String.replaceAll的源码分析)
- 关于Java中split方法对空字符串处理问题
- java处理字符串搜索嵌套结构的方法
- Java字符串处理常用方法
- 【java解惑】java字符串替换方法使用
- Java字符串处理的几个常用方法
- java字符串替换字符串实例,对replace方法的重写
- 使用java处理字符串公式运算的方法
- Java字符串的处理常用方法
- 使用java中replaceAll方法替换字符串中的反斜杠
- (华为机试大备战)java。多了解了解最常用的那个类库的方法对处理字符串的方法
- JAVA 中split的用法将字符串变成数组,利用SPLIT方法写的JAVA里的字符串替换函数(转)
- Java 字符串不区分大小写和区分大小写替换————一句代码就能搞定(2种方法)
- 转: 关于Java中split方法对空字符串处理问题
- java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
- java处理字符串替换操作
- 爪哇(Java)自定义的二个字符串高效处理方法,在静寂一个半月之后
- 爪哇(Java)自定义的二个字符串高效处理方法,在静寂一个半月之后 推荐
- Java字符串替换方法
- 关于Java中split方法对空字符串处理问题