【问题标题】:Java split methodJava拆分方法
【发布时间】:2015-05-13 23:40:46
【问题描述】:

我正在尝试拆分输入的数字,例如 (123) 456-7890。

 String [] split = s.split(delimiters);

我一直在网上搜索在括号内分隔区号的方法,但我没有找到适合我的情况的任何方法。我不知道阵列是否也弄乱了它的打印。该数组不是必需的,但我不知道还能做什么,因为它需要使用 split 方法。

【问题讨论】:

  • 您的第一个拆分元素是(123,那么您执行System.out.println("(" + NumberTokens[0] + ")") 会得到两个大括号。要么将 ( 添加到分隔符并从元素 1 开始,要么只打印而不使用 "("
  • 我需要确保 123 是一个标记/元素,而不是 (123.
  • 只需删除所有非数字字符(简单的正则表达式)并以您喜欢的方式处理您的号码:System.out.println("123) 456-7890".replaceAll("\\D", ""));
  • 你为什么要从你的问题中删除所有细节?

标签: java regex string split


【解决方案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));
     }
}

你可以试试here

【讨论】:

  • 这不能回答 OP 的问题 - 因为 OP 需要使用 split 方法。此外,电话号码在括号后没有连字符:i 是 "(123) 456-7890" 而不是 "(123)-456-7890"
【解决方案2】:

如果我理解您的问题,您可以使用Pattern,例如(XXX) XXX-XXXX,其中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 方法。
  • 您可以在() 上拆分,因此您无需替换它们。
  • @igreen 是的,但是您在数组中得到两个空的String(s)。用我的方法你不会。
【解决方案3】:

这行得通:

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

【讨论】:

    【解决方案4】:

    如果一定要使用拆分方式:

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

    【讨论】:

    • 在模式允许捕获背靠背分隔符之后,您不需要 \\ 和 +。
    • 方括号之间的连字符有特殊含义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2017-07-26
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多