4

我正在尝试获得这样的期望输出:

555
555
5555

通过使用代码:

public class Split {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    String phoneNumber = "(555) 555-5555";

    String[] splitNumberParts = phoneNumber.split(" |-");


    for(String part : splitNumberParts)
        System.out.println(part);

但不知道如何摆脱第一个元素中的“()”。

提前致谢。

问候

4

4 回答 4

7

StringTokenizer支持多个分隔符,这些分隔符可以作为第二个参数列在字符串中。

StringTokenizer tok = new StringTokenizer(phoneNumber, "()- ");
String a = tok.nextToken();
String b = tok.nextToken();
String c = tok.nextToken();

在您的情况下,这将给出 a = 555,b = 555,c = 5555。

于 2013-01-13T16:42:58.963 回答
4

为什么不先更换?

String phoneNumber = "(555) 555-5555";
String cleaned = phoneNumber.replaceAll("[^0-9]",""); // "5555555555"

然后你可以使用 substring 来获取你想要的部分。

于 2013-01-13T16:42:08.947 回答
1

如果您只想按顺序排列数字,那么您可以使用PatternMatcher类来查找与特定模式匹配的所有子字符串,在您的情况下,\d+.

您需要使用Matcher#find()方法来获取与您的模式匹配的所有子字符串。并用于Matcher#group()打印匹配的子字符串。

这是你如何做到的: -

String phoneNumber = "(555) 555-5555";

// Create a Pattern object for your required Regex pattern
Pattern pattern = Pattern.compile("\\d+");

// Create a Matcher object for matching the above pattern in your string
Matcher matcher = pattern.matcher(phoneNumber);

// Use Matcher#find method to fetch all matching pattern.
while (matcher.find()) {
    System.out.println(matcher.group());
}
于 2013-01-13T16:51:23.500 回答
1

当您使用 split java 将返回一个字符串数组,该数组与您提供的项目的出现位置分开,因此如果您像现在这样在哪里进行拆分,您可以添加如下内容:

phoneNumber.split(" |-|\\(|\\) ");

但这不是很好看,现在是吗?所以我们可以做这样的事情,它基本上告诉java删除任何不是数字的东西:

String[] splitNumberParts = phoneNumber.split("\\D+");
于 2013-01-13T16:59:32.353 回答