2011-05-25 52 views
4

我有一个字符串,如"portal100common2055"需要帮助使用正则表达式在java中拆分字符串

我想分成两部分,第二部分应该只包含数字。

"portal200511sbet104"将成为"portal200511sbet""104"

能否请你帮我实现这一目标?

+0

如果你只想要最后四个字符为什么不是子字符串? – 2011-05-25 06:44:21

+0

substring我可以做,但我不知道天气我可以只有最后4个字符作为numeric.it可以是最后5个字符或3下面的解决方案工作正常。 – Raja 2011-05-25 07:04:27

回答

5

像这样:

Matcher m = Pattern.compile("^(.*?)(\\d+)$").matcher(args[0]); 
    if(m.find()) { 
     String prefix = m.group(1); 
     String digits = m.group(2); 
     System.out.println("Prefix is \""+prefix+"\""); 
     System.out.println("Trailing digits are \""+digits+"\""); 
    } else { 
     System.out.println("Does not match"); 
    } 
+0

请参阅我的1行解决方案:) – Bohemian 2011-05-25 07:37:30

3
String[] parts = input.split("(?<=\\D)(?=\\d+$)"); 
if (parts.length < 2) throw new IllegalArgumentException("Input does not end with numbers: " + input); 
String head = parts[0]; 
String numericTail = parts[1]; 

这更优雅的解决方案使用的背后和看向前看的正则表达式的功能。

说明:

  • (?<=\\D)意味着在当前点,确保前一字符的非数字结束(非数字表示为\D
  • (?=\\d+$)装置T的当前点,确保只有数字被发现的输入端(数字表示为\d

这只会在需要的点真正你想要分割的INP ut