Java字符串与正则表达式匹配错误

3

如果字符串的格式如下,我需要将其拆分:

String test="City: East Khasi Hills";

有时候我可能会得到 String test="City:";

如果在“:”后面有任何单词,我希望匹配该模式。

我正在使用

String city=test.matches(":(.*)")?test.split(":")[1].trim():"";

但是我的正则表达式返回false。顺便说一句,我正在使用在线正则表达式工具来测试我的字符串。

在这个工具中,我得到了匹配结果。但是Java却返回了false。


不要使用Regex101来进行Java的正则表达式测试,因为它不支持Java的正则表达式。请改用RegexPlanet进行测试。 - RealSkeptic
另外,你首先如何拆分这个“String”,为什么要这样做? - RealSkeptic
我需要获取“:”后面的单词,如果没有单词则返回空字符串。 - saikiran
2个回答

4
你不需要同时使用matches和split。只需像这样使用split
String[] arr = "City: East Khasi Hills".split("\\s*:\\s*");
String city = arr.length==2 ? arr[1] : "";
//=> "East Khasi Hills"

这个答案仍然有效,因为它会在arr[1]中给出:\s*之后的文本。 - anubhava
针对哪个输入它没有工作,你期望的结果是什么? - anubhava
如果我有一个字符串,比如“城市:”,在这种情况下,分割操作将不起作用。 - saikiran
Split 函数肯定会起作用,你将在 arr[1] 中得到一个空值。再次强调,对于这个输入,你期望得到什么结果? - anubhava
让我们在聊天中继续这个讨论 - saikiran

0
首先,我认为您需要检查您的整体模式是否符合预期。因此,您可以尝试类似以下的内容:
String str = "City: East Khasi Hills";
// Test if your pattern matches
if (str.matches("(\\w)+:(\\s(\\w)+)*")) {
    // Split your string
    String[] split = str.split(":");
    // Get the information you need
    System.out.println("Attribute name: "  + split[0]);
    System.out.println("Attribute value: " + split[1].trim());
}

我的问题是,如果不匹配模式怎么办,无论如何都解决了,感谢您的时间@Fernando。 - saikiran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接