2011-03-23 63 views
0

我想分析一个文本文件。如果“:”发生,那么我想分成两部分的数组。第二部分进一步调查:如果它包含“in”(注意空间,这很重要)或“out”,数组列表端口会被填充。如果原始字符串的后半部分都不是“in”和“out”,则泛型将被填充。我用下面的代码试图它:字符串匹配问题?

if (str.matches("\\:")) { 
    String[] splitarray = str.split("\\:"); 
    if (splitarray[1].matches("in ")) { 
    ports.add(str); 
    } else { 
    if (splitarray[1].matches("out ")) { 
     ports.add(str); 
    } else { 
     generics.add(str); 
    } 
    } 
} 
+1

反斜杠是错误的 - 它引入了一个特殊的字符,其中:不是。如果你想逃避一个特殊的正则表达式字符,那么你需要一个双反斜杠。 :不是一个特殊的正则表达式,所以你根本不需要它。 – trojanfoe 2011-03-23 08:09:21

+0

你不能使用[java.util.Properties](http://download.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html)吗? – Nishant 2011-03-23 08:15:15

回答

0

参见如果这有助于

public static void main(String[] args) { 
    // assuming only 1 occurence of ':' 
    String a = "sasdads:asdadin "; 
    ArrayList<String> ports = new ArrayList<String>(); 
    ArrayList<String> generics = new ArrayList<String>(); 
    if (a.contains(":")) { 
     String[] strings = a.split(":"); 
     if (strings[1].contains("in ")) { 
      ports.add(strings[1]); 
     }else{ 
      generics.add(strings[1]); 
     } 
    } 
    System.out.println(); 
} 
+0

工程。非常感谢你! – john 2011-03-23 08:43:38

1

matches确定是否整个字符串相匹配的表达,而不是如果字符串的一些部分的表达式匹配。对于这样一个简单的例子,我不会用正则表达式去。只要使用indexOf找到你的子串:

int indexOfColon = str.indexOf(':'); 
if (indexOfColon >= 0) { 
    String afterColon = str.substring(indexOfColon + 1); 
    int indexOfIn = afterColon.indexOf("in "); 
    // you get the idea 
} 
+0

@Bart Kiers:由于OP希望找到第一个冒号后的子字符串,因此使用contains将搜索冒号,并且如果contains返回true,则会使用indexOf,这会导致两次搜索而不是一次搜索。 – 2011-03-23 08:29:04

+0

是啊,我没有真正读过'if'语句。在这种情况下,'indexOf'确实是合适的。 – 2011-03-23 08:36:43