我正在尝试编写一个简单的程序,它接受两个用户输入:一个要拆分的字符串,以及一个指定一个或多个分隔符的字符串。该程序应该打印一个由分割子字符串和分隔符组成的字符串数组。我必须实现 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;
}
}
最佳答案
您可以使用此基于前向和后向的正则表达式进行拆分:
(?<=#)|(?=#)
这意味着在下一个字符为 #
或上一个字符为 #
的位置进行拆分
对于多个分隔符:
(?<=[?#])|(?=[?#])
您的 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/