我试图获取给定String的“筋急转弯”,并将其作为值放入HashMap中。“筋急转弯”是指在字词边界结尾的子字符串(最大长度为50个字符)。
这是一个代码示例,显示了我如何尝试做到这一点:
import java.util.regex.*;
public class Test {
public static void main(String[] args) throws Exception {
final Pattern pattern = Pattern.compile("(^.{0,50}\b)");
final Matcher m = pattern.matcher(
"This is a long string that I want to find a shorter teaser for.");
if (m.find()) {
System.out.println("Found: " + m.group(1));
} else {
System.out.println("No match");
}
}
}
我希望它能打印:
Found: This is a long string that I want to find a
但是,它打印:
No match
如果我单独测试此正则表达式,它会执行应做的工作-它会找到一个值的子字符串,该字符串的最大长度为50个字符,并以单词边界结尾。但是,如果我对其进行调试,则m.find总是会给我一个错误。
任何想法如何解决这个问题?(我专注于获取预告片,而不是使用Matcher.find();-))
根据Oracle文档中有关Characters的说明, \ b是字符串中退格的转义序列。但是,您希望\ b用作单词边界的正则表达式,因此您需要将斜杠更改为文字斜杠,即\\,以便Pattern.compile看到\ b
Pattern.compile("(^.{0,50}\\b)")
您可以通过在String上调用.toCharArray()来看到此效果。
单斜杠
System.out.println(Arrays.toString("\b".toCharArray()));
=> []
双斜线
System.out.println(Arrays.toString("\\b".toCharArray()));
=> [\, b]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句