问题已经结束,因为我误解了这种情况。为了表明我的愚蠢,我不会删除我写的内容。
我想将一段字符串编码为Pattern,然后返回字符串。
我试过了:
String s = buff.readLine();
Pattern p = new Pattern(s);
并使用以下内容检索我的字符串
System.out.println(p.toString());
但它不起作用,输出只是“包名@(一些随机的东西)......我试过Pattern p = Pattern.compile (s);
但我收到了编译器的错误。
答案 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存储一个字符串是非常奇怪的。