如何将String编码为Pattern并检索String

时间:2010-02-09 23:34:43

标签: java

问题已经结束,因为我误解了这种情况。为了表明我的愚蠢,我不会删除我写的内容。

我想将一段字符串编码为Pattern,然后返回字符串。

我试过了:

String s = buff.readLine();
Pattern p = new Pattern(s);

并使用以下内容检索我的字符串

System.out.println(p.toString());

但它不起作用,输出只是“包名@(一些随机的东西)......我试过Pattern p = Pattern.compile (s); 但我收到了编译器的错误。

3 个答案:

答案 0 :(得分:1)

我刚试过这个:

Pattern p = Pattern.compile("Hello");
System.out.println( p.toString() );

它有效,打印出'你好'。

您是否正在导入java.util.regex.Pattern包?

答案 1 :(得分:1)

Pattern#toString()的javadoc似乎表明只有java 1.5才会返回完整正则表达式的源代码。但是,Pattern#pattern()没有自标记,因此可能在引入类之后可用(java 1.4)。试试System.out.println(p.pattern());

答案 2 :(得分:0)

您正在使用正则表达式Pattern对象来存储和检索String。这毫无意义。模式不用于存储字符串。模式用于搜索其他字符串。这是一个正则表达式引擎。让我举一个使用模式的例子。

在Java中使用正则表达式时,我们确实有2个对象。模式和匹配。

模式=正则表达式。
匹配器=将模式应用于字符串时找到的所有匹配项。

让我举一个模式和匹配器的例子,我们将搜索四个数字,用冒号分隔,就像时间一样,即12:42

long timeL;
Pattern pattern = Pattern.compile(".*([1234567890]{2}:[1234567890]{2}).*");
Matcher matcher = pattern.matcher("Match me!  12:42  Match me!");
if (matcher.matches()) {
 String timeStr = matcher.group(1);
 System.out.println("Just the time: "+timeStr);
 System.out.println("The entire String: "+matcher.group(0));
 String[] timeParts = timeStr.split("[:]");
 int hours = Integer.parseInt(timeParts[0]);
 int minutes = Integer.parseInt(timeParts[1]);
 timeL = (hours*60*60*1000) + (minutes*60*1000);
 System.out.println(timeL);
}

在我们将模式应用于字符串并获得匹配器之后,我们询问匹配器是否实际上有匹配。你会注意到我们然后请求组1,这是在parantheses中的匹配:。([1234567890] {2}:[1234567890] {2})。 组0将是整个匹配,并将导致返回给定的字符串。

所以,我希望你理解为什么使用Pattern存储一个字符串是非常奇怪的。