我想通过分隔符“-”将字符串“004-034556”拆分为两个字符串:

part1 = "004";
part2 = "034556";

这意味着第一个字符串将包含“-”之前的字符,第二个字符串将包括“-”之后的字符。

我还想检查字符串中是否有“-”。


当前回答

可以使用以下语句通过换行符拆分字符串:

String textStr[] = yourString.split("\\r?\\n");

可以使用以下语句按连字符/字符拆分字符串:

String textStr[] = yourString.split("-");

其他回答

这些要求为解释留下了空间。我建议写一个方法,

public final static String[] mySplit(final String s)

其封装了该功能。当然,您可以使用String.split(..),如实现的其他答案中所述。

您应该为输入字符串以及期望的结果和行为编写一些单元测试。

优秀的考生应包括:

 - "0022-3333"
 - "-"
 - "5555-"
 - "-333"
 - "3344-"
 - "--"
 - ""
 - "553535"
 - "333-333-33"
 - "222--222"
 - "222--"
 - "--4555"

通过定义相应的测试结果,您可以指定行为。

例如,如果“-333”应在[,333]中返回,或者如果它是一个错误。“333-333-33”是否可以在[333333-33]或[3333-333,33]中分开,或者这是一个错误?等等

使用适当命名的方法String#split()。

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

请注意,split的参数假定为正则表达式,因此如果需要,请记住转义特殊字符。

有12个字符具有特殊含义:反斜杠\、插入符号^、美元符号$、句点或点。,竖条或管道符号|,问号?,星号或星号*、加号+、左括号(,右括号)和左方括号[,左大括号{,这些特殊字符通常被称为“元字符”。

例如,在句点/点上拆分。(这在正则表达式中表示“任何字符”),使用反斜杠\转义单个特殊字符,如so split(“\\.”),或使用字符类[]表示文字字符,如“[.]”,或使用Pattern#quote()转义整个字符串,如so split(“.”)。

String[] parts = string.split(Pattern.quote(".")); // Split on the exact string.

要预先测试字符串是否包含某些字符,只需使用string#contains()。

if (string.contains("-")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

注意,这不采用正则表达式。为此,请改用String#matches()。

如果您希望在生成的部分中保留拆分的字符,请使用正面环视。如果您希望拆分字符在左侧结束,请使用前缀?<=组。

String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556

如果您希望拆分字符在右侧结束,请使用前置?=组。

String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556

如果您想限制结果部分的数量,那么可以提供所需的数量作为split()方法的第二个参数。

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42

使用Regex使用多个字符拆分字符串

public class StringSplitTest {
     public static void main(String args[]) {
        String s = " ;String; String; String; String, String; String;;String;String; String; String; ;String;String;String;String";
        //String[] strs = s.split("[,\\s\\;]");
        String[] strs = s.split("[,\\;]");
        System.out.println("Substrings length:"+strs.length);
        for (int i=0; i < strs.length; i++) {
            System.out.println("Str["+i+"]:"+strs[i]);
        }
     }
  }

输出:

Substrings length:17
Str[0]:
Str[1]:String
Str[2]: String
Str[3]: String
Str[4]: String
Str[5]: String
Str[6]: String
Str[7]:
Str[8]:String
Str[9]:String
Str[10]: String
Str[11]: String
Str[12]:
Str[13]:String
Str[14]:String
Str[15]:String
Str[16]:String

但不要期望所有JDK版本都有相同的输出。我看到了一个bug,在某些JDK版本中,第一个空字符串被忽略了。此错误在最新的JDK版本中不存在,但在JDK1.7晚期版本和1.8早期版本之间的某些版本中存在。

使用org.apache.commons.lang.StringUtils的拆分方法,该方法可以根据要拆分的字符或字符串拆分字符串。

方法签名:

public static String[] split(String str, char separatorChar);

在您的情况下,当出现“-”时,您希望拆分字符串。

您可以简单地执行以下操作:

String str = "004-034556";

String split[] = StringUtils.split(str,"-");

输出:

004
034556

假设字符串中不存在-,则返回给定的字符串,并且不会出现任何异常。

实现这一点的一种方法是在for每个循环中运行字符串,并使用所需的拆分字符。

public class StringSplitTest {

    public static void main(String[] arg){
        String str = "004-034556";
        String split[] = str.split("-");
        System.out.println("The split parts of the String are");
        for(String s:split)
        System.out.println(s);
    }
}

输出:

The split parts of the String are:
004
034556