创建正则表达式以进行拆分

时间:2015-02-19 17:55:52

标签: java regex split

我目前正在学习信息学并知道什么是正则表达式(不是在java中)。 我有一个输入:

"String1  ( Nr = 323) String2 String3 (Nr  = 3)"

我想通过使用:

来拆分它
split("[ ()=]");

因为我认为这会分裂所有" ""("")"" =&#34 ;.我对吗?或者我需要在它后面放一个+?如果这已经是正确的我可以添加一个*所以我也可以拆分像"(("?

如果这不是问题,那么我在java中关于正则表达式的另一个问题是如何检查我的String是否只包含数字。

我试过了:

contains(".*\\d+.*")
matches(".*\\d+.*")

但我很确定其中一个正在发挥作用。所以我的问题应该是拆分正则表达式。

我最初的问题是我在索引2处得到了分裂的String数组的NumberFormatException,通常应该是" 323"?

我可以将我的正则表达式与*一起使用吗?比如"[ ()=]*"

提前致谢

2 个答案:

答案 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]+"

会做的。