解决方案 »
- 新手求助
- 关于集合
- linux环境下运行java(不使用jdk)?
- 大家给各建议!!!!!!!!!!做什么WAP网站符合大众 急!!!!!!!!!!!!!!!!
- 请问:现在的软件公司大多数用什么开发工具?eclipse 吗?
- 在循环中生成的随机字符串每次都是一样的,为什么?
- 这是什么原因,会抛出java.lang.NoClassDefFoundError ?
- 交换机之间有那些连接方式?
- 很简单的问题啊! 可我怎么不知道怎么办啊! 散分啊!!!
- Exception in thread "main"
- GregorianCalendar类构造方法的问题
- 一道关于循环的题(随机生成10个不重复的数字)
class reg
{
public static void main(String args[]){
String s="品名哈哈别名英文名gaga";
s=s.replaceAll("品名(.*)别名(.*)英文名(.*)","$1,$2,$3");//用","分割得到的各个名称
System.out.println(s);
String ss[]=s.split(",");//再用","切割一下就可以了
for(String str:ss){
System.out.println(str);
}
}
}
这样写的话意思就是必须有三个输出项,
但是看你后面的描述
有的时候会出现 “品名硝铵英文名Ammonium nitrate” 这种情况, 也就是说并不是所有的字符串都严格的按照你的正则格式构成
所以就需要用 或 来处理。修改成这样你再试一下
(1)((品名.*)(别名.*)(英文名.*))|((品名.*)(英文名.*)) 用“或”来处理
(2)(品名.*)(别名.*){0,1}(英文名.*) 用花括号表示个数 {0 , 1} 表示 0个 或者 1 个,即 :(别名.*)出现一次或者不出现
快两年多没写过正则了 不知道上面的对不对 你在正则工具里面验证一下 在修改一下就行
Matcher matcher= Pattern.compile("(品名(.*?)|别名(.*?))(?=别|英)|英文名(.*)").matcher(s);
while( matcher.find()){
System.out.println(matcher.group().replaceAll("品名|别名|英文名", ""));
}
class reg
{
public static void main(String args[]){
//String s="品名哈哈别名呵呵英文名gaga";
String s="品名哈哈英文名gaga";
s=s.replaceAll("品名|别名|英文名",",");//用","分割得到的各个名称
System.out.println(s);
String ss[]=s.split(",");//再用","切割一下就可以了
for(String str:ss){
System.out.println(str);
}
}
}
System.out.println("品名硝铵英文名Ammonium nitrate".replaceAll("品名(.*?)(别名(.*?))?英文名(.*?)", "$1,$3,$4"));
@zhouren1314 的方法更直观哈哈
嗯,确实可行,但是如果串中有更多相关属性的话式子(品名xx别名xx英文名xx熔点xx沸点xx...)就会变得更复杂(不过这点我也没提到,不能怪仁兄)
相比较而言,还是5l兄的更适用