2014-05-01 69 views
-1

我想解析这个字符串。我想要返回具有.prm的单词,然后是:。之后的所有其他单词。我正在用Java中的Pattern和Matching类挣扎。有人可以请指点我正确的方向吗?Java匹配和解析字符串

This is the statement to remove, CAPTURETHIS.prm: WANT TO CAPTURE THIS MESSAGE TOO! 

请帮助

+0

你是不是指'String [] matches = text.split(“\\。pm”,2);'? –

+0

不,我不想要任何东西,但CAPTURETHIS.prm和以下部分: – Jarod

+0

@Jodod你说你想要捕获:后面的部分。 – Devavrata

回答

1

你可以做到这一点在以下方式:

String s="CAPTURETHIS.prm: WANT TO CAPTURE THIS MESSAGE TOO!". 
String[] str=s.split(".prm:"); 
String s1=str[0]; 
String s2=str[1]; 

s1为"CAPTURETHIS"和s2 WANT TO CAPTURE THIS MESSAGE TOO!

+0

字符串是动态的,正在加载,并且之前有文本.prm,我需要剥离。你能告诉我如何摆脱CAPTURETHIS.prm所有的东西,而不知道CAPTURETHIS会一直如此吗? – Jarod

0

如果CAPTURETHIS决不会包含空格,由至少一个空白字符之前,那么下面的正则表达式会做

.*\s(\S+\.prn:.*) 

注意,如果模式something.prn:在线路出现不止一次这将捕获只有最后一个。

Pattern p = Pattern.compile(".*\\s(\\S+\\.prn:.*)"); 
Matcher m = p.matcher(inputString); 
if (m.matches()) 
    System.out.println(m.group(1)); 
else 
    /* no match */; 
+0

你能告诉我一个代码的例子吗?我正在尝试将此类与Pattern类一起使用,但它并未编译 – Jarod

+0

这不会编译为给出无效的转义序列 – Jarod

+0

对不起,错过了反斜杠。所有正则表达式反斜杠必须在Java字符串中加倍。 –

0

假设你不希望在“xxxx.prm”是在该行的开始,它应该没有嵌入空白,

Pattern p = Pattern.compile("\\S+\\.prm:.*"); 
    Matcher m = p.matcher(inputString); 
    if (m.find()) { 
     matched = m.group(); 
    } 

这个发现包括的子:

  • 一个或更多的非空白字符
  • “.PRM:”
  • 零或 - “:”后的更多字符

字符串是matched的结果。

(我想过使用负查找屁股和其他东西......但我突然意识到,这是不必要的,因为最初的\S+将是贪婪的。同样,$ ^和锚是不必要的。)

0

我建议是这样的:

StringBuilder builder = new StringBuilder(); 
    String testString = "CAPTURETHIS.prm: WANT TO CAPTURE THIS MESSAGE TOO!"; 
    String[] splittedByColon = testString.split(":"); 

    for (String word : splittedByColon[0].split(" ")) { 
     if(word.endsWith(".prm")){ 
      builder.append(word.split(".prm")[0]); 
     } 
    } 

    if(splittedByColon.length > 1) 
     builder.append(splittedByColon[1]); 

    return builder.toString(); 
+0

正如我在上面的帖子中所说,在你的例子中的testString是动态的,我将永远有一个。PRM在字符串中,我需要在它之前切割一切。 – Jarod

+0

但是没有.prm后缀的每个前面的单词都不会被添加到构建器中 – Kuba

+0

但是我也希望.prm被剥离它 – Jarod

0

同Devavrata的答案,但有几行添加删除不需要的声明

String s="This is the statement to remove, CAPTURETHIS.prm: WANT TO CAPTURE THIS MESSAGE TOO!". 
String[] str1=s.split(".prm:"); 
String before=str[0]; 
String after=str[1]; 
String[] str2=before.split(" "); 
String fileName=str2[str2.length-1]; 

文件名西港岛线包含CAPTURETHIS和后将包含要TOO捕获此消息!