如何在Java中拆分具有多个分隔符的字符串

如何在Java中拆分具有多个分隔符的字符串,java,string,stringtokenizer,Java,String,Stringtokenizer,我试图获得如下所示的期望输出: 555 555 5555 phoneNumber.split(" |-|\\(|\\) "); 通过使用代码: public class Split { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String phoneNumber = "(555) 555-5555"; St

我试图获得如下所示的期望输出:

555
555
5555
phoneNumber.split(" |-|\\(|\\) ");
通过使用代码:

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);
但是我不知道如何去掉第一个元素中的“()”

提前谢谢


关于

为什么不先更换

String phoneNumber = "(555) 555-5555";
String cleaned = phoneNumber.replaceAll("[^0-9]",""); // "5555555555"
然后可以使用子字符串来获取所需的部分。

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

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

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

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

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

以下是您的操作方法:-

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());
}

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

555
555
5555
phoneNumber.split(" |-|\\(|\\) ");
但那不是很好看,是吗?因此,我们可以这样做,它基本上告诉java删除任何不是数字的东西:

String[] splitNumberParts = phoneNumber.split("\\D+");

您是否尝试将它们添加到分隔符字符串中?是否检查了模式和匹配器类?一旦你了解了它们,你就可以编写正则表达式来提取你在案例中需要的内容,数组中的第一个元素将是“”(空格)。在这种情况下,请如何将所有输出放入数组?String[]elements=new String[tok.countTokens()],然后使用for循环来迭代令牌。我更喜欢这个解决方案,因为它不需要精确的源代码格式,从而提供了更多的灵活性