2014-01-28 115 views
1

我有问题,拆分字符串'split_',它似乎是我的java netbean不能拆分'split_'被使用。如何拆分Java中的'*'字符串

任何想法我们如何克服这一点?

我指的是这个解决方案,但它只能在不使用'*'的情况下进行拆分。 How to split a string in Java

String echoPHP= "test*split_*test2"; 

    String[] strArray = echoPHP.split("*split_*"); 

    String part1 = strArray2[0]; // 004 
    String part2 = strArray2[1]; // 034556 



    System.out.println(strArray[0]); 
    System.out.println(strArray[1]); 

错误是:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 
*split_* 

输出应该是:

test 
test2 
+2

'split'接受正则表达式。所以一定要逃避特殊字符。阅读javadoc。 –

+1

试试这个'.split(“\\ *”)' – Rugal

+0

请考虑参考String.split –

回答

3

使用Pattern.quote()周围的分割字符串,以确保它作为一个文字,而不是一个正则表达式:

String[] strArray = echoPHP.split(Pattern.quote("*split_*")); 

否则您将遇到困难,因为*是正则表达式中的一个特殊字符,用于匹配进行处理的字符或组的任意数量的匹配项。

当然,您可以使用\手动转义正则表达式中使用的所有特殊字符,但如果您不想使用任何正则表达式功能,则这两个特征都不太清晰且更容易出错。

+2

的文档感谢浆果,我喜欢你的代码,所以我已经投了你的答案。 –

0

您可以使用拆分法这样

String[] strArray = echoPHP.split("\\*split_\\*"); 
  • 字符是特殊的系统字符..所以你应该在*字符前使用“\”。
1

以下是在java中拆分字符串的不同情况。你可以使用一个适合你的应用程序。

情况1:这是用字符“”分割字符串的代码。 :“”

String imageName = "picture1.jpg"; 
String [] imageNameArray = imageName.split("\\."); 
for(int i =0; i< imageNameArray.length ; i++) 
{ 
    system.out.println(imageNameArray[i]); 
} 

而如果错误地有前后左右空间在这种情况下?这也是考虑这些空间的最佳实践。

String imageName = "picture1 . jpg"; 
    String [] imageNameArray = imageName.split("\\s*.\\s*"); 
     for(int i =0; i< imageNameArray.length ; i++) 
     { 
      system.out.println(imageNameArray[i]); 
     } 

这里,\\ S *是有考虑的空间,让你只需要分裂字符串。

现在,假设你已经像两个特殊的字符之间放置参数:在像*放慢参数#时间#参数#或参数或者甚至是两个不同的充迹象。我们可以通过这个代码有那些症状之间的所有这些参数的清单:

import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import org.apache.commons.lang.StringUtils; 

public class Splitter { 

    public static void main(String[] args) { 

     String pattern1 = "#"; 
     String pattern2 = "#"; 
     String text = "(#n1_1#/#n2_2#)*2/#n1_1#*34/#n4_4#"; 

     Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2)); 
     Matcher m = p.matcher(text); 
     while (m.find()) { 
      ArrayList parameters = new ArrayList<>(); 
      parameters.add(m.group(1)); 
      System.out.println(parameters); 
      ArrayList result = new ArrayList<>(); 
      result.add(parameters); 
      // System.out.println(result.size()); 
     } 

    } 
} 

在这里列出的结果将有参数N1_1,N2_2,n4_4。