我目前正在学习信息学并知道什么是正则表达式(不是在java中)。 我有一个输入:
"String1 ( Nr = 323) String2 String3 (Nr = 3)"
我想通过使用:
来拆分它split("[ ()=]");
因为我认为这会分裂所有" ""("")"" =&#34 ;.我对吗?或者我需要在它后面放一个+?如果这已经是正确的我可以添加一个*所以我也可以拆分像"(("?
如果这不是问题,那么我在java中关于正则表达式的另一个问题是如何检查我的String是否只包含数字。
我试过了:
contains(".*\\d+.*")
matches(".*\\d+.*")
但我很确定其中一个正在发挥作用。所以我的问题应该是拆分正则表达式。
我最初的问题是我在索引2处得到了分裂的String数组的NumberFormatException,通常应该是" 323"?
我可以将我的正则表达式与*
一起使用吗?比如"[ ()=]*"
?
提前致谢
答案 0 :(得分:1)
是的,它将拆分这些字符但不会产生预期的结果。你需要在你的角色类中使用量词。我建议使用+
含义"一个或多个"次。
String s = "String1 ( Nr = 323) String2 String3 (Nr = 3)";
String[] parts = s.split("[ ()=]+");
System.out.println(Arrays.toString(parts));
输出
[String1, Nr, 323, String2, String3, Nr, 3]
答案 1 :(得分:0)
用于拆分字符串
的正则表达式您有非空格分隔符()=
被您想要的字符串之间的空格所包围。你可以慷慨并使用
"[ ()=]+" any mixture
或繁琐(需要其中一个()=
)并执行
"\\s*[()=]\\s*"
使用此正则表达式,"foo (( bar"
的分割将为您提供三个字符串。
确保它只是三个()=
的一个+。
要检查字符串是否只包含数字,您必须定义“数字”。 “数字”和“数字”之间存在一般性混淆,“数字”可能是有符号或无代数,整数或分数,......数字 s 意味着至少有一个空格。
"\\s*(\\d+)(\\s+\\d+)*\\s*"
描述由(可选)空格分隔和包围的无符号整数。在这个简单的例子中,也是
"[\\s\\d]+"
会做的。