Java分割方法

3
我正在尝试分割输入的号码,例如(123) 456-7890。
 String [] split = s.split(delimiters);

我一直在网上寻找如何在括号集合内界定区号的方法,但是我没有找到适用于我的情况的任何方法。我不知道数组是否会影响打印结果。虽然这个数组不是必需的,但由于需要使用split方法,我不知道该怎么做。


你的第一个分割元素是(123,所以当你执行System.out.println("(" + NumberTokens[0] + ")")时,你会得到两个括号。要么将(添加到分隔符并从元素1开始,要么只是不打印"(" - Sergey Grinev
我需要确保123是一个标记/元素,而不是(123. - sefor
只需删除所有非数字字符(简单的正则表达式),然后按您喜欢的方式处理数字即可:System.out.println("123) 456-7890".replaceAll("\\D", "")); - Nir Alfasi
你为什么把问题中的所有细节都删掉了? - anon
4个回答

1
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{
    public static void main(String[] args){
        String phoneNumber = "(123)-456-7890";
        String pattern = "\\((\\d+)\\)-(\\d+)-(\\d+)";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(phoneNumber);
        if (m.find())
            System.out.println(m.group(1) + " " + m.group(2) + " " + m.group(3));
     }
}

您可以在这里尝试。

这并没有回答 OP 的问题 - 因为 OP 需要使用 split 方法。另外,电话号码在括号后面没有连字符:i 是 "(123) 456-7890" 而不是 "(123)-456-7890" - YoYo

1
如果我理解您的问题,您可以使用类似于(XXX) XXX-XXXX这样的Pattern,其中X是数字。您还可以使用{n}来要求n次出现。您可以使用()进行分组。例如,
String str = "(123) 456-7890";
Pattern p = Pattern.compile("\\((\\d{3})\\) (\\d{3})-(\\d{4})");
Matcher m = p.matcher(str);
if (m.matches()) {
    String areaCode = m.group(1);
    String first3digits = m.group(2);
    String last4digits = m.group(3);
    System.out.printf("(%s) %s-%s%n", areaCode, first3digits,
            last4digits);
}

给出你请求的输出
(123) 456-7890

或者,如果你必须使用split函数,你可以先使用replaceAll函数去掉(),然后再进行分割。

String str = "(123) 456-7890";
String[] arr = str.replaceAll("[()]", "").split("[ -]");
System.out.printf("(%s) %s-%s%n", arr[0], arr[1], arr[2]);

这也会给您提供所请求的输出。
(123) 456-7890

这不回答OP的问题 - 因为OP需要使用split方法。 - YoYo
你可以在 () 上分割,这样就不需要替换它们了。 - igreenfield
@igreen 没错,但是你在数组中会得到两个空的 String。而使用我的方法则不会有这个问题。 - Elliott Frisch

0
如果你必须使用split方法:
String s= "(123) 456-7890"
String[] split = s.split("[()-]");
System.out.println("(" + split[1] + ")" + split[2] + "-" + split[3]);

1
您不需要在模式后面添加 \ 和 +。这样可以捕获连续分隔符。 - stringsn88keys
连字符在方括号之间具有特殊含义。 - YoYo

0

这个有效:

    String s= "(123) 456-7890";
    String[] parts = s.split("[()\\- ]");
    System.out.println("(" + parts[1] + ") " + parts[3] + "-" + parts[4]);

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