Java 数组 - split() 与用户指定的分隔符

标签 java regex string split

我正在尝试编写一个简单的程序,它接受两个用户输入:一个要拆分的字符串,以及一个指定一个或多个分隔符的字符串。该程序应该打印一个由分割子字符串和分隔符组成的字符串数组。我必须实现 public static String[] split(String s, String regex)

如果要分割的字符串是

cd#34#abef#1256

我当前的代码正确输出

[cd, 34, abef, 1256]

我需要输出的是

[cd, #, 34, abef, #, 1256]

如果要分割的字符串有两个用户指定的分隔符怎么办

cd?34?abef#1256

我怎样才能将其拆分,使其看起来像

[cd, ?, 34, ?, abef, #, 1256]

我之前研究过的问题都没有使用用户指定的字符串和分隔符。

这是我当前的代码:

import java.util.Arrays;
import java.util.Scanner;

public class StringSplit
{
    public static void main(String[] args)
    { 
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter a string: ");
        String str = scan.next();
        System.out.print("Specify delimiter(s): ");
        String del = scan.next();
        String[] result = split(str, del);
        System.out.print(Arrays.toString(result));
    }

    public static String[] split(String s, String regex)
    {
        String[] myString = s.split(regex);
        return myString;
    }
}

最佳答案

您可以使用此基于前向和后向的正则表达式进行拆分:

(?<=#)|(?=#)

这意味着在下一个字符为 # 或上一个字符为 # 的位置进行拆分

对于多个分隔符:

(?<=[?#])|(?=[?#])

RegEx Demo

您的 Java 方法可以是这样的:

public static String[] split(String s, String d) {
    String del = Pattern.quote(d);
    String[] myString = s.split("(?<=[" + del + "])|(?=[" + del + "])");
    return myString;
}

并将其称为:

System.out.println(
   Arrays.toString(split("aa{bb}(cc)[dd]ee#ff...gg?hh*+ii", "#.?*+-[](){}"))
);

输出:

[aa, {, bb, }, (, cc, ), [, dd, ], ee, #, ff, ., ., ., gg, ?, hh, *, +, ii]

关于Java 数组 - split() 与用户指定的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980275/

相关文章:

java - NetBeans 中的无效部署描述符错误

java - Android 动画 flash vs. HTML5 vs. Android 的原生动画库?

regex - Perl Regexp::Common 意外匹配错误的 URL

c - 反向字符串程序中的空字符是什么?

c++ - 为什么我的 SPOJ GCD2 代码在 SPOJ 上出错?

java - ThreadLocal.java中0x61C88647常量的含义是什么

java - GAE/J : How do I POST a Multipart MIME message from appengine to facebook

Javascript 正则表达式查找可以跨多行中断的特定字符串

c# - 在正则表达式中使用 Unicode block

android - 以字符串形式读取文件