如何在Java中拆分字符串?
我想通过分隔符将字符串分成两个字符串:"004-034556"
"-"
part1 = "004";
part2 = "034556";
这意味着第一个字符串将包含 前面的字符,第二个字符串将包含 之后的字符。'-'
'-'
我还想检查字符串中是否有。'-'
我想通过分隔符将字符串分成两个字符串:"004-034556"
"-"
part1 = "004";
part2 = "034556";
这意味着第一个字符串将包含 前面的字符,第二个字符串将包含 之后的字符。'-'
'-'
我还想检查字符串中是否有。'-'
使用适当命名的方法 String#split()
。
String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
请注意,'的参数被假定为正则表达式,因此请记住在必要时转义特殊字符。split
有12个具有特殊含义的字符:反斜杠,脱字符号,美元符号,句点或点,竖线或竖线符号,问号,星号或星号,加号,左括号,右括号,以及左方括号,左大括号,这些特殊字符通常被称为“元字符”。
\
^
$
.
|
?
*
+
(
)
[
{
例如,要在句点/点上拆分(在正则表达式中表示“任何字符”),请使用反斜杠 \
来转义单个特殊字符,或者使用字符类 []
来表示像这样这样的文字字符,或者使用 Pattern#quote()
来转义整个字符串。.
split("\\.")
split("[.]")
split(Pattern.quote("."))
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
直接处理字符串的替代方法是使用正则表达式和捕获组。这样做的好处是,它可以直接暗示对输入进行更复杂的约束。例如,下面将字符串拆分为两部分,并确保两者都仅由数字组成:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class SplitExample
{
private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");
public static void checkString(String s)
{
Matcher m = twopart.matcher(s);
if (m.matches()) {
System.out.println(s + " matches; first part is " + m.group(1) +
", second part is " + m.group(2) + ".");
} else {
System.out.println(s + " does not match.");
}
}
public static void main(String[] args) {
checkString("123-4567");
checkString("foo-bar");
checkString("123-");
checkString("-4567");
checkString("123-4567-890");
}
}
由于该模式在此实例中是固定的,因此可以提前编译它并存储为静态成员(在示例中的类装入时初始化)。正则表达式为:
(\d+)-(\d+)
括号表示捕获组;匹配正则表达式的该部分的字符串可以通过 Match.group() 方法访问,如下所示。\d 匹配和单个小数位,+ 表示“匹配一个或多个前一个表达式”)。- 没有特殊含义,因此仅匹配输入中的该字符。请注意,在将此写为 Java 字符串时,需要对反斜杠进行双重转义。其他一些例子:
([A-Z]+)-([A-Z]+) // Each part consists of only capital letters
([^-]+)-([^-]+) // Each part consists of characters other than -
([A-Z]{2})-(\d+) // The first part is exactly two capital letters,
// the second consists of digits