??????? 最近看到一个有趣的问题,String str="abcd",如何使用正则得到str的所有字符,结果"a,b,c,d"。
??????? 不是很简单吗,上代码:
???????
class="java" name="code">public static void errorMethodTest(String srcStr) { String[] strArr = srcStr.split(""); for (String str : strArr) { System.out.print(str + ","); } System.out.println(); }
?
???? 结果为:
,a,b,c,d,
?
??? 前面多了一个""。
???? 如何正确的得到a,b,c,d呢?参考了博客http://www.coderanch.com/t/497299/java/java/Splitting-String-characters
???? 正确方法为:?
?
public static void strSplitMethodTest(String srcStr) { String[] strArr = srcStr.split("(?<!^)"); for (String s : strArr) { System.out.print(s + ","); } System.out.println(); }
?
?? 或者
?
public static void strSplitMethod2Test(String srcStr) { String[] strArr = srcStr.split("(?!^)"); for (String str : strArr) { System.out.print(str + ","); } System.out.println(); }
??? 上面的那玩意是什么呢?是正则表达式中的反向预查,正向预查,参考了博客http://my.oschina.net/lxpan/blog/27907
?
??? (?<=pattern) 反向匹配
??? (?<!pattern) 反向不匹配
??? (?=pattern) 正向匹配
??? (?!pattern) 正向不匹配
?
???? 测试例子:
public static void myTest() { String testStr = "foreach eachfor forall allfor alleach eachall"; Pattern p = Pattern.compile("(?<!for)each");// 匹配任何前面不带有for的each Matcher match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } System.out.println("--------------------------------"); p = Pattern.compile("(?<=for)each");// 匹配任何前面带有for的each match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } System.out.println("-------------------------------"); p = Pattern.compile("for(?!each)");// 会匹配任何后面不是each的for match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } System.out.println("-------------------------------"); p = Pattern.compile("for(?=each)");// 会匹配任何后面是each的for match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } }
?
???? 结果为:
???
each each each -------------------------------- each ------------------------------- for for for ------------------------------- for
?
?? 上面的不够直观,使用RegexBuddy软件结果如下:
??
?
??
?
?
???? 不使用正则怎么做呢?
????
public static void strMethodTest(String srcStr) { char[] strArr = srcStr.toCharArray(); for (char c : strArr) { System.out.print(c + ","); } System.out.println(); }
?
???? 全文完。
?
?
?
?
?
????
?
?
??
?
?
?
?