2011-04-21 102 views
2

我有一个字符串"Hello" hello(包括引号)的字符串,我只是想有引号的Hello但不包括引号掌握行情

我尝试使用正则表达式,但它永远不会找到报价即时通讯猜测

String s = new String("string"); 
    Pattern p = Pattern.compile("\"([^\"])\""); 
    Matcher m = p.matcher(n); 
    while (m.find()) { 
     s = m.group(1); 
    } 

while循环从未得到执行,建议?

+0

男孩,这是肯定的[类似于这个问题](http://stackoverflow.com/questions/5745562/removing-quotes-from-string/5745625#5745625)! – tchrist 2011-04-21 17:00:00

+0

这是一个正则表达式问题,它们都是相似的! :) – 2011-04-21 17:17:26

回答

5

- 移动在括号内的星适当分组---

"\"([^\"]*)\"" 

与代码

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Test { 

    public static void main(String[] args) { 
     String s = new String("\"Hello\" hello"); 
     Pattern p = Pattern.compile("\"([^\"]*)\""); 
     Matcher m = p.matcher(s); 
     while (m.find()) { 
      System.out.println(m.group(1)); 
     } 
    } 
} 

其产生预期的输出

Hello 

测试成功 - - 原文如下 -

你不匹配任何东西,因为你的正则表达式只写入引用的一个字符串。

"\"([^\"])*\"" 

更接近您的需要。注意星号,它表示零或更多的前面的表达式。在这种情况下,前面的表达是“任何缺乏双引号的东西”。

+0

+1:良好的捕获。 – 2011-04-21 16:45:57

+0

@Peter,谢谢。 – 2011-04-21 16:47:00

+0

做了这些变化,while循环仍然没有发生 – tyczj 2011-04-21 16:56:14

4

我建议你尝试一个字符串,如果你想找到任何引号的话。 ;)

尝试

String s = "start \"string\" end"; 

String s = "\"Hello\" hello"; 
+0

他发布了字符串的内容,所以为了得到引号,它们已经被转义了。问题在于正则表达式,而不是字符串。 – 2011-04-21 16:46:12

+0

+1:看起来这是一个两个问题,字符串和正则表达式! – 2011-04-21 17:02:09

+0

在开始和结束时忘记'''的一个常见错误不是字符串的一部分;) – 2011-04-21 17:10:39

0

你可以简单地在这种情况下使用indexOf("\"")

+0

我试过了,它不断给我索引超出范围 – tyczj 2011-04-21 16:48:38