一个字符串匹配 请大家帮我把这个字符串匹配一下。谢谢!String s="| auto_increment_increment | 1 |AUTO_INCREMENT列增长幅度"; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这还不清楚么?我要用java的字符创匹串,Patter那个东东,来匹配整个字符串s=“ ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度”Pattern p = Pattern.compile("");Matcher m = p.matcher(s);最后得到三个数,一个是:auto_increment_increment第2个数为:1第三个为:AUTO_INCREMENT列增长幅度 String s = " | auto_increment_increment | 1 |AUTO_INCREMENT"; for (String s1 : s.split("\\s*\\|\\s*")) System.out.println(s1); String s=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度"; Pattern p = Pattern.compile("¦(.*?)¦(.*?)¦(.*)",Pattern.CASE_INSENSITIVE|Pattern.DOTALL); Matcher m = p.matcher(s); while(m.find()){ out.println(m.group(1).trim()+"##"+m.group(2).trim()+"##"+m.group(3).trim()); } 大家匹配的都不对啊,rascalboy520可能没有注意到字符串最前面还有一个空格,我改了。但是结果是这样的:####| auto_increment_increment | 1 |AUTO_INCREMENT列增长幅度####出现了4个#号,还是很明显没有匹配对。 public class Test3 { public static void main(String[] args) { String s = "| auto_increment_increment | 1 |AUTO_INCREMENT列增长幅度"; String regex = "(\\|[^|]*)+"; System.out.println(s.matches(regex)); }}我不知道楼主是不是要让匹配为 true 啊?根据仅有的一些信息写了一个,你可以试一下。 有空格的话,那个空格是不要的么?如果是不要的话,在里面加上一句代码:s=s.trim();String s=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度"; s=s.trim();Pattern p = Pattern.compile("¦(.*?)¦(.*?)¦(.*)",Pattern.CASE_INSENSITIVE ¦Pattern.DOTALL); Matcher m = p.matcher(s); while(m.find()){ out.println(m.group(1).trim()+"##"+m.group(2).trim()+"##"+m.group(3).trim()); } 日志-病毒-网络-操作系统-安全-c#-asp.net-java-delphi-sql-oracle学习资源 在这里可以找找http://japee.com.cn/jew/bbs.aspx rascalboy520,谢谢你!但是你匹配的有问题,我一运行时出现异常:Exception in thread "main" java.lang.NullPointerException at newforold.Filemysql.readfile(Filemysql.java:35) at newforold.Filemysql.main(Filemysql.java:19)而且你的表达式写的好像不对。 如果那个空格是有用的数据的话,只要把正则那里改为:Pattern p = Pattern.compile("(.*?)¦(.*?)¦(.*?)¦(.*)",Pattern.CASE_INSENSITIVE ¦Pattern.DOTALL); 就可以了,这是我这边打出来的数据:##auto_increment_increment##1##AUTO_INCREMENT列增长幅度注意前面有两个##,说明第一个数据是空的,而你给的那段:String s=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度";前面也是空的,还有问题么?? ¦ 这个符号我在myeclipse里,不能通过,是在jsp里测的, Pattern.CASE_INSENSITIVE ¦Pattern.DOTALL 中那个"¦" 要改为‘|’啊,我是从我的代码里直接copy的, 如果仅仅是这个字符串的话,我建议你用 java.util.StringTokenizer这个类. 我要分别得到auto_increment_increment、1、AUTO_INCREMENT列增长幅度。这三个数据。只能用Pattern方法。因为还涉及到别的东西,不能用别的方法简单处理,我需要将这三个数据再进一步处理,所以要把他们分开。谢谢各位帮忙! 如果这个字符串是特定的格式就好办了看这样行不行,应该可以满足你的要求了String content=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度";String regex="[^\\¦]*\\¦([^\\¦]*)\\¦([^\\¦]*)\\¦([^\\¦]*)";Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);Matcher matcher = pattern.matcher(content);if (matcher.matches()) { System.out.println(matcher.group(1).trim()); System.out.println(matcher.group(2).trim()); System.out.println(matcher.group(3).trim());} " ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度"如果是每次都对上面的这个串作处理的话,我写的那个正则应该不会有问题的,Exception in thread "main" java.lang.NullPointerException at newforold.Filemysql.readfile(Filemysql.java:35) at newforold.Filemysql.main(Filemysql.java:19) 看看你代码的35行,得到的是第几条数据,然后从那里找原因吧,先把你得到的String打出来,再分别打出匹配到的3条,看看是哪个出错, 终于搞定了,不过还是多谢各位!Pattern p = Pattern.compile("[0-9a-zA-Z_\u4e00-\u9fa5]+"); Matcher m = p.matcher(s); int i = 0; String[] www = new String[3]; while (m.find()) { www[i++] = m.group(); for (int j = 0; j < 3; j++) { System.out.println(www[j]); } } 没什么说的,还是anqini 得答案好。我也想回答。但是等我晚上回到家的时候,大家都给出了答案。我都没地方挣分了阿。俺们公司白天不允许上网的阿。所以错过了很多机会啊 。package com.sytdc.cxl;public class ZhenZeTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s = " | auto_increment_increment | 1 |AUTO_INCREMENT"; // \\反斜线字符,一些特殊的字符要进行转移 // \s 空白字符 // X* 0或多次 for (String s1 : s.split("\\s*\\|\\s*")) System.out.println(s1); String s2 = "123|345|gy|8j|76h|ythgb|uyh"; for (String s1 : s2.split("\\|")) System.out.println(s1); for (String s1 : s2.split("3")) System.out.println(s1); }} String s="|auto_increment_increment |1 |AUTO_INCREMENT列增长幅度"; Pattern p=Pattern.compile("(正则)(正则)(正则)"); Matcher m=p.matcher(s); while(m.find()){ System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); }应该是用这个方法,正则表达式记不太清了,你自己写吧。如果能写对,相应的 m.group(1);m.group(2);m.group(3);就是你想要的结果。 TreeSet的排序问题 eclipse 用户库的问题 SWT编程问题 得分好贴 求助?? 在线等 在HTTP/1.1中会返回一个chunked encoding,请讲一下这个编码的优缺点和算法!谢谢! 有关jar打包的问题。 问一个问题!!!! Add File/Pakage 哪里有Ant的资料?谢了先 关于Hibernate 的@TableGenerator疑问, 看不懂这个有什么用? 求有向图中两点间(已知的源节点和目的节点)的所有路径怎么求啊 关于内部类问题,内部类里的this
来匹配整个字符串s=“ ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度”
Pattern p = Pattern.compile("");
Matcher m = p.matcher(s);
最后得到三个数,一个是:auto_increment_increment
第2个数为:1
第三个为:AUTO_INCREMENT列增长幅度
String s = " | auto_increment_increment | 1 |AUTO_INCREMENT";
for (String s1 : s.split("\\s*\\|\\s*"))
System.out.println(s1);
Pattern p = Pattern.compile("¦(.*?)¦(.*?)¦(.*)",Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher m = p.matcher(s);
while(m.find()){
out.println(m.group(1).trim()+"##"+m.group(2).trim()+"##"+m.group(3).trim());
}
####| auto_increment_increment | 1 |AUTO_INCREMENT列增长幅度
####
出现了4个#号,还是很明显没有匹配对。
String s = "| auto_increment_increment | 1 |AUTO_INCREMENT列增长幅度";
String regex = "(\\|[^|]*)+";
System.out.println(s.matches(regex));
}
}我不知道楼主是不是要让匹配为 true 啊?根据仅有的一些信息写了一个,
你可以试一下。
s=s.trim();String s=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度";
s=s.trim();
Pattern p = Pattern.compile("¦(.*?)¦(.*?)¦(.*)",Pattern.CASE_INSENSITIVE ¦Pattern.DOTALL);
Matcher m = p.matcher(s);
while(m.find()){
out.println(m.group(1).trim()+"##"+m.group(2).trim()+"##"+m.group(3).trim());
}
在这里可以找找http://japee.com.cn/jew/bbs.aspx
Exception in thread "main" java.lang.NullPointerException
at newforold.Filemysql.readfile(Filemysql.java:35)
at newforold.Filemysql.main(Filemysql.java:19)
而且你的表达式写的好像不对。
Pattern p = Pattern.compile("(.*?)¦(.*?)¦(.*?)¦(.*)",Pattern.CASE_INSENSITIVE ¦Pattern.DOTALL);
就可以了,
这是我这边打出来的数据:
##auto_increment_increment##1##AUTO_INCREMENT列增长幅度
注意前面有两个##,说明第一个数据是空的,而你给的那段:String s=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度";
前面也是空的,还有问题么??
这三个数据。只能用Pattern方法。因为还涉及到别的东西,不能用别的方法简单处理,
我需要将这三个数据再进一步处理,所以要把他们分开。
谢谢各位帮忙!
看这样行不行,应该可以满足你的要求了String content=" ¦ auto_increment_increment ¦ 1 ¦AUTO_INCREMENT列增长幅度";
String regex="[^\\¦]*\\¦([^\\¦]*)\\¦([^\\¦]*)\\¦([^\\¦]*)";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(content);
if (matcher.matches()) {
System.out.println(matcher.group(1).trim());
System.out.println(matcher.group(2).trim());
System.out.println(matcher.group(3).trim());
}
如果是每次都对上面的这个串作处理的话,我写的那个正则应该不会有问题的,
Exception in thread "main" java.lang.NullPointerException
at newforold.Filemysql.readfile(Filemysql.java:35)
at newforold.Filemysql.main(Filemysql.java:19)
看看你代码的35行,得到的是第几条数据,然后从那里找原因吧,
先把你得到的String打出来,再分别打出匹配到的3条,看看是哪个出错,
int i = 0;
String[] www = new String[3];
while (m.find())
{ www[i++] = m.group(); for (int j = 0; j < 3; j++)
{
System.out.println(www[j]);
}
}
俺们公司白天不允许上网的阿。所以错过了很多机会啊 。package com.sytdc.cxl;public class ZhenZeTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub String s = " | auto_increment_increment | 1 |AUTO_INCREMENT";
// \\反斜线字符,一些特殊的字符要进行转移
// \s 空白字符
// X* 0或多次
for (String s1 : s.split("\\s*\\|\\s*"))
System.out.println(s1); String s2 = "123|345|gy|8j|76h|ythgb|uyh";
for (String s1 : s2.split("\\|"))
System.out.println(s1);
for (String s1 : s2.split("3"))
System.out.println(s1);
}}
Pattern p=Pattern.compile("(正则)(正则)(正则)");
Matcher m=p.matcher(s);
while(m.find()){
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
应该是用这个方法,正则表达式记不太清了,你自己写吧。如果能写对,相应的 m.group(1);m.group(2);m.group(3);就是你想要的结果。