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

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

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

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


当前回答

你真正需要考虑的方法只有两种。

使用String.split作为一个字符分隔符,否则您不关心性能

如果性能不是问题,或者分隔符是不是正则表达式特殊字符的单个字符(即,不是.$|()[{^?*+\之一),则可以使用String.split。

String[] results = input.split(",");

如果delimeter是单个字符而不在上面的列表中,则split方法有一个优化,以避免使用正则表达式。否则,它必须编译正则表达式,这是不理想的。

如果使用复杂的分隔符并且您关心性能,请使用Pattern.split并预编译模式。

如果性能是一个问题,并且分隔符不是上述问题之一,那么应该预先编译一个正则表达式模式,然后可以重用它。

// Save this somewhere
Pattern pattern = Pattern.compile("[,;:]");

/// ... later
String[] results = pattern.split(input);

最后一个选项仍然会创建一个新的Matcher对象。您还可以缓存此对象并为每个输入重置它以获得最大性能,但这有点复杂,而且不线程安全。

其他回答

要拆分字符串,请使用string.split(regex)。查看以下示例:

String data = "004-034556";
String[] output = data.split("-");
System.out.println(output[0]);
System.out.println(output[1]);

输出

004
034556

注:

此拆分(正则表达式)以正则表达式作为参数。记住转义正则表达式特殊字符,如句点/点。

你真正需要考虑的方法只有两种。

使用String.split作为一个字符分隔符,否则您不关心性能

如果性能不是问题,或者分隔符是不是正则表达式特殊字符的单个字符(即,不是.$|()[{^?*+\之一),则可以使用String.split。

String[] results = input.split(",");

如果delimeter是单个字符而不在上面的列表中,则split方法有一个优化,以避免使用正则表达式。否则,它必须编译正则表达式,这是不理想的。

如果使用复杂的分隔符并且您关心性能,请使用Pattern.split并预编译模式。

如果性能是一个问题,并且分隔符不是上述问题之一,那么应该预先编译一个正则表达式模式,然后可以重用它。

// Save this somewhere
Pattern pattern = Pattern.compile("[,;:]");

/// ... later
String[] results = pattern.split(input);

最后一个选项仍然会创建一个新的Matcher对象。您还可以缓存此对象并为每个输入重置它以获得最大性能,但这有点复杂,而且不线程安全。

使用适当命名的方法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

Use:

String[] result = yourString.split("-");
if (result.length != 2) 
     throw new IllegalArgumentException("String not in correct format");

这将把你的绳子分成两部分。数组中的第一个元素将是包含-之前的内容的部分,数组中的第二个元素将包含-之后的字符串部分。

如果数组长度不是2,则字符串的格式不是:string string。

查看String类中的split()方法。

根据文档:

public String[]split(Stringregex,int limit)围绕给定正则表达式的匹配项拆分此字符串。此方法返回的数组包含此字符串的子字符串,该子字符串由另一个与给定表达式匹配或以一串数组中的子字符串的顺序如下出现在此字符串中。如果表达式与输入,则结果数组只有一个元素,即一串

基本上你可以这样做:

String s = "123-456-789-123"; // The String to be split
String[] array = s.split("-"); // Split according to the hyphen and put them in an array
for(String subString : array){ // Cycle through the array
   System.out.println(subString);
}

输出:

123
456
789
123