我有一个字符串,"004-034556"我想分成两个字符串:
"004-034556"
string1="004"; string2="034556";
这意味着第一个字符串将包含之前的字符'-',第二个字符串将包含之后的字符'-'。我还想检查字符串是否包含'-'在其中。如果没有,我会抛出一个异常。我怎样才能做到这一点?
'-'
只需使用适当的方法:String#split().
String#split()
String string = "004-034556"; String[] parts = string.split("-"); String part1 = parts[0]; // 004 String part2 = parts[1]; // 034556
请注意,这需要一个正则表达式,因此请记住在必要时转义特殊字符。
有12 个具有特殊含义的字符:反斜杠\、插入符号^、美元符号$、句点或点.、竖线或竖线符号|、问号?、星号或星号*、加号+、左括号(、右括号), 和左方括号 ,[左大括号{, 这些特殊字符通常被称为“元字符”。
\
^
$
.
|
?
*
+
(
)
[
{
因此,如果您想在正则表达式.中表示“任何字符”的句点/点进行拆分,请使用反斜杠\来转义单个特殊字符,如 so split("\\."),或使用字符类[\]表示文字字符,如 so split("[.]"),或使用Pattern#quote()to像这样转义整个字符串split(Pattern.quote("."))。
split("\\.")
[\]
split("[.]")
Pattern#quote()
split(Pattern.quote("."))
String[] parts = string.split(Pattern.quote(".")); // Split on period.
要预先测试字符串是否包含某些字符,只需使用String#contains().
String#contains()
if (string.contains("-")) { // Split it. } else { throw new IllegalArgumentException("String " + string + " does not contain -"); }
请注意,这不需要正则表达式。为此,请String#matches()改用。
String#matches()
如果您想在结果部分中保留拆分字符,请使用positive lookaround。如果您希望拆分字符出现在左侧,请通过?<=在模式上添加前缀 group 来使用正向lookbehind。
?<=
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()方法的第二个参数。
split()
String string = "004-034556-42"; String[] parts = string.split("-", 2); String part1 = parts[0]; // 004 String part2 = parts[1]; // 034556-42