Jorgesys Asked: 2020-01-25 17:00:14 +0800 CST 2020-01-25 17:00:14 +0800 CST 2020-01-25 17:00:14 +0800 CST 如何在 Java 中分隔字符串。如何使用拆分() 772 从一个字符串,"123-654321"我想要的是把它分成两个字符串: string1=123 string2=654321 java 7 Answers Voted Best Answer Jorgesys 2020-01-25T17:00:29+08:002020-01-25T17:00:29+08:00 为此,使用String#split()定义分隔符的方法,在此 String 的情况下为"-". String string = "123-654321"; String[] parts = string.split("-"); String part1 = parts[0]; // 123 String part2 = parts[1]; // 654321 该方法将正则表达式作为参数。如果要使用文本分隔符,必须在字符\ ^ $ . | ? * + ( ) [ {前面加上\. String[] parts = string.split("\\|"); // Separar por "|" 或者你可以使用方法Pattern#quote()。 String separador = Pattern.quote("|"); String[] parts = string.split(separador); 使用字符作为分隔符时遇到问题? 有一些“特殊用途”的字符称为元字符, 元字符是在正则表达式中具有特殊含义的非字母字符。这些是什么 : \, ^, $, ., |, ?, *, +, (, ), {, },[ 如果这些直接用于拆分字符串,它们将无法正常工作,例如: String cadena = "Hola|Stackoverflow|en|español"; String[] parts = cadena.split("|"); System.out.println(Arrays.asList(parts)); 输出错误: [H, o, l, a, |, S, t, a, c, k, o, v, e, r, f, l, o, w, |, e, n, |, e, s, p, a, ñ, o, l] 这些字符必须在“\”字符之前进行转义,例如: String cadena = "Hola|Stackoverflow|en|español"; String[] parts = cadena.split("\\|"); System.out.println(Arrays.asList(parts)); 正确的输出: [Hola, Stackoverflow, en, español] 为了在任何情况下应用分隔符,可以使用以下方法,其中定义了字符串和分隔符,如果检测到分隔符是元字符,则应用转义: private static String[] separaCaracteres(String cadena, String separator){ System.out.println("Separator: " + separator); String[] parts = null; if(separator.equals("|")|| separator.equals("\\")||separator.equals(".")||separator.equals("^")||separator.equals("$") ||separator.equals("?")||separator.equals("*")||separator.equals("+")||separator.equals("(")||separator.equals(")") ||separator.equals("{")||separator.equals("[")){ //Es metacaracter! parts = cadena.split("\\"+separator); }else{ //No es metacaracter. parts = cadena.split(separator); } return parts; } 调用上述方法的示例: System.out.println(Arrays.asList(separaCaracteres("Hola\\Stackoverflow\\en\\español", "\\")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola^Stackoverflow^en^español", "^")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola$Stackoverflow$en$español", "$")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola.Stackoverflow.en.español", ".")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola|Stackoverflow|en|español", "|")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola?Stackoverflow?en?español", "?")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola*Stackoverflow*en*español", "*")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola+Stackoverflow+en+español", "+")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola(Stackoverflow(en(español", "(")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola)Stackoverflow)en)español", ")")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola{Stackoverflow{en{español", "{")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola}Stackoverflow}en}español", "}")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola[Stackoverflow[en[español", "[")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola Stackoverflow en español", " ")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola½Stackoverflow½en½español", "½")).toString()); System.out.println(Arrays.asList(separaCaracteres("Hola-Stackoverflow-en-español", "-")).toString()); 离开: Separator: \ [Hola, Stackoverflow, en, español] Separator: ^ [Hola, Stackoverflow, en, español] Separator: $ [Hola, Stackoverflow, en, español] Separator: . [Hola, Stackoverflow, en, español] Separator: | [Hola, Stackoverflow, en, español] Separator: ? [Hola, Stackoverflow, en, español] Separator: * [Hola, Stackoverflow, en, español] Separator: + [Hola, Stackoverflow, en, español] Separator: ( [Hola, Stackoverflow, en, español] Separator: ) [Hola, Stackoverflow, en, español] Separator: { [Hola, Stackoverflow, en, español] Separator: } [Hola, Stackoverflow, en, español] Separator: [ [Hola, Stackoverflow, en, español] Separator: [Hola, Stackoverflow, en, español] Separator: ½ [Hola, Stackoverflow, en, español] Separator: - [Hola, Stackoverflow, en, español] A. Cedano 2020-07-28T23:40:09+08:002020-07-28T23:40:09+08:00 split()是方法 分割字符串最合适的方法是 String#split(). String string = "123-654321"; String[] parts = string.split("-"); String part1 = parts[0]; // 123 String part2 = parts[1]; // 654321 但是,在使用split它时,我们必须考虑一些事情。 特殊字符 在拆分任何字符串时,我们必须考虑到此方法采用正则表达式,因此有必要在情况允许时转义特殊字符。 有 12 个具有特殊含义的字符:反斜杠\、方框^、美元符号$、句点.、竖线或竖线符号|、问号?、星号或星号*、加号+、左括号(、右括号)和开口支架[,开口支架{。这些特殊字符通常称为“元字符”。(见此链接) 因此,如果您想拆分,例如这个字符串:período/punto,在正则表达式中表示“任何字符”,请使用反斜杠\来转义单个特殊字符。像这样的东西:split("\\."),或者使用字符类\[\]来表示文字字符,例如split("[.]"),或者使用Pattern#quote()转义整个字符串,例如split(Pattern.quote (". ")). String[] parts = string.split(Pattern.quote(".")); // Split on period. 可以进行初步测试 要预先测试字符串是否包含某些字符,请使用String#contains(). if (string.contains("-")) { // Hacer split. } else { throw new IllegalArgumentException("String " + string + " no contiene -"); } 但是这段代码不采用正则表达式。为此,请String#matches()改用。 保留部分部分的分割字符 如果要在生成的部分中保留拆分字符,请使用正面外观。如果您希望拆分字符位于最后一个拆分的左侧,请在模式中的组前面使用正向lookbehind?<=。 String string = "123-654321"; String[] parts = string.split("(?<=-)"); String part1 = parts[0]; // 123 String part2 = parts[1]; // -654321 如果您想在末尾添加拆分字符,请在第一个拆分的右侧使用正向前瞻作为模式中组的前缀?=。 String string = "123-654321"; String[] parts = string.split("(?=-)"); String part1 = parts[0]; // 123- String part2 = parts[1]; // 654321 限制结果零件的数量 如果您想限制结果部分的数量,您可以提供所需的数量作为方法的第二个参数split()。 String string = "123-654321-789"; String[] parts = string.split("-", 2); String part1 = parts[0]; // 123 String part2 = parts[1]; // 654321-789 空字符串 在某些情况下,返回的 String 数组的元素包含空白字符串。 Prefix : - 当字符串以分隔符开头时,第一个元素成为空字符串。 String[] items = ",A,B,C".split(","); 它相当于: String[] items = { "", "A", "B", "C" }; Middle : - 在字符串中间每次出现额外的分隔符都会产生一个相应的空字符串: String[] items = ",A,B,,,C".split(","); 它相当于: String[] items = { "", "A", "B", "", "", "C" }; 后缀:字符串末尾出现的所有分隔符都将被忽略。 String[] items = "A,B,C,,,,,,,,,,".split(","); 它相当于: String[] items = { "A", "B", "C" }; 但是,我们可以强制 split 通过传递 -1 作为限制来计算字符串末尾的所有附加分隔符: String[] items = "A,B,C,,,".split(",", -1); 它相当于: String[] items = { "A", "B", "C", "", "", "" }; 资料来源: 如何在Java中拆分字符串 Java字符串拆分教程和示例 Atscub 2020-07-29T02:55:45+08:002020-07-29T02:55:45+08:00 三种不同的方法: 1.使用功能 String.split(): String str = "123-654321"; String[] parts = str.split("-"); 此解决方案使用正则表达式,因此如果您不使用它们,它并不是最有效的。 2.使用类 StringTokenizer: static private List<String> fastSplit(final String text, final String separator, final boolean emptyStrings){ List<String> result = new ArrayList<String>(); final StringTokenizer st = new StringTokenizer(text, separator, true); String token = null; String lastToken = separator; while (st.hasMoreTokens()) { token = st.nextToken(); if (token.equals(separator)) { if (lastToken.equals(separator) && emptyStrings) { result.add(""); } } else { result.add(token); } lastToken = token; } return result; } 这种方法的问题在于,它仅在分隔符长度为 1 时才能正常工作。 3. 使用 String.indexOf(): 在这种情况下,它将适用于任何长度的分隔符。 static private List<String> fastSplit2(final String text, final String separator, final boolean emptyStrings) { final List<String> result = new ArrayList<String>(); if (text != null && text.length() > 0) { int index1 = 0; int index2 = text.indexOf(separator); int sepLen = separator.length(); while (index2 >= 0) { String token = text.substring(index1, index2); if (!token.isEmpty() || emptyStrings){ result.add(token); } index1 = index2 + sepLen; index2 = text.indexOf(separator, index1); } if (index1 < text.length() - 1) { result.add(text.substring(index1)); } } return result; } userStack 2020-01-25T17:26:05+08:002020-01-25T17:26:05+08:00 使用StringTokenizer:在此类的构造函数中,我们指定分隔符“-”,new StringTokenizer(nombre,"-"); import java.util.StringTokenizer; public class Separador { public static void main(String[] args) { String nombre="004-034556"; StringTokenizer tokens=new StringTokenizer(nombre,"-"); while (tokens.hasMoreTokens()) { System.out.println(tokens.nextToken()); } } } SoftMolina 2020-08-03T12:28:22+08:002020-08-03T12:28:22+08:00 split()字符串 split() 方法字符串 此方法有两个变体,并围绕给定正则表达式的匹配项拆分此字符串。 此方法的语法为: public String[] split(String regex) 参数详情: Regex - 定界正则表达式。 返回值 返回通过围绕给定正则表达式的匹配分区此字符串计算的字符串数组。 例子 import java.io.*; public class Test { public static void main(String args[]) { String Str = new String("123-654321"); System.out.println("Return Value :" ); for (String retval: Str.split("-")) { System.out.println(retval); } } } 这将产生以下输出: Salida Return Value : 123 654321 SupineDread89 2020-02-23T22:03:07+08:002020-02-23T22:03:07+08:00 您可以做的是使用方法substring,即通过位置或位置范围提取某些字符。 String cadena = "004-034556"; String sCadena = cadena.substring(0,3); String sCadenaD = cadena.substring(4, cadena.length()); System.out.println(sCadena); System.out.println(sCadenaD); 如果这不是您使用的唯一格式,您可以使用方法indexOf,这将帮助您提取连字符之后的所有内容。 int guion = cadena.indexOf("-"); System.out.println(guion); String ej = cadena.substring(guion+1, cadena.length()); 我希望它会对你有所帮助,这是我对同一条链所做的一个例子 public class main{ public static void main (String [] args){ String cadena = "004-034556"; String sCadena = cadena.substring(0,3); String sCadenaD = cadena.substring(4, cadena.length()); System.out.println(sCadena); System.out.println(sCadenaD); int guion = cadena.indexOf("-"); System.out.println(guion); String ej = cadena.substring(guion+1, cadena.length()); System.out.println(ej); } } GAbriel lopez 2020-01-29T03:01:47+08:002020-01-29T03:01:47+08:00 需要注意的是,在执行 .split() 时,第一个元素从 [0] 开始 String value= "123-654321"; String[] parts = value.split("-"); System.out.println(parts[0]); //out --> 123 如果分隔符未达到结果,则位置[0]将等于原始字符串 String value= "123-654321"; String[] parts = value.split("p"); System.out.println(parts[0]); //out --> 123-654321
为此,使用
String#split()
定义分隔符的方法,在此 String 的情况下为"-"
.该方法将正则表达式作为参数。如果要使用文本分隔符,必须在字符
\ ^ $ . | ? * + ( ) [ {
前面加上\
.或者你可以使用方法
Pattern#quote()
。使用字符作为分隔符时遇到问题?
有一些“特殊用途”的字符称为元字符,
如果这些直接用于拆分字符串,它们将无法正常工作,例如:
输出错误:
这些字符必须在“\”字符之前进行转义,例如:
正确的输出:
为了在任何情况下应用分隔符,可以使用以下方法,其中定义了字符串和分隔符,如果检测到分隔符是元字符,则应用转义:
调用上述方法的示例:
离开:
split()
是方法分割字符串最合适的方法是
String#split()
.但是,在使用
split
它时,我们必须考虑一些事情。特殊字符
在拆分任何字符串时,我们必须考虑到此方法采用正则表达式,因此有必要在情况允许时转义特殊字符。
有 12 个具有特殊含义的字符:反斜杠
\
、方框^
、美元符号$
、句点.
、竖线或竖线符号|
、问号?
、星号或星号*
、加号+
、左括号(
、右括号)
和开口支架[
,开口支架{
。这些特殊字符通常称为“元字符”。(见此链接)因此,如果您想拆分,例如这个字符串:
período/punto
,在正则表达式中表示“任何字符”,请使用反斜杠\
来转义单个特殊字符。像这样的东西:split("\\.")
,或者使用字符类\[\]
来表示文字字符,例如split("[.]")
,或者使用Pattern#quote()
转义整个字符串,例如split(Pattern.quote (". "))
.可以进行初步测试
要预先测试字符串是否包含某些字符,请使用
String#contains()
.但是这段代码不采用正则表达式。为此,请
String#matches()
改用。保留部分部分的分割字符
如果要在生成的部分中保留拆分字符,请使用正面外观。如果您希望拆分字符位于最后一个拆分的左侧,请在模式中的组前面使用正向lookbehind
?<=
。如果您想在末尾添加拆分字符,请在第一个拆分的右侧使用正向前瞻作为模式中组的前缀
?=
。限制结果零件的数量
如果您想限制结果部分的数量,您可以提供所需的数量作为方法的第二个参数
split()
。空字符串
在某些情况下,返回的 String 数组的元素包含空白字符串。
Prefix : - 当字符串以分隔符开头时,第一个元素成为空字符串。
它相当于:
Middle : - 在字符串中间每次出现额外的分隔符都会产生一个相应的空字符串:
它相当于:
后缀:字符串末尾出现的所有分隔符都将被忽略。
它相当于:
但是,我们可以强制 split 通过传递 -1 作为限制来计算字符串末尾的所有附加分隔符:
它相当于:
资料来源:
三种不同的方法:
1.使用功能
String.split()
:此解决方案使用正则表达式,因此如果您不使用它们,它并不是最有效的。
2.使用类
StringTokenizer
:这种方法的问题在于,它仅在分隔符长度为 1 时才能正常工作。
3. 使用
String.indexOf()
:在这种情况下,它将适用于任何长度的分隔符。
使用
StringTokenizer
:在此类的构造函数中,我们指定分隔符“-”,new StringTokenizer(nombre,"-");
split()字符串 split() 方法字符串
此方法有两个变体,并围绕给定正则表达式的匹配项拆分此字符串。
此方法的语法为:
参数详情:
Regex - 定界正则表达式。
返回值
返回通过围绕给定正则表达式的匹配分区此字符串计算的字符串数组。
例子
这将产生以下输出:
您可以做的是使用方法
substring
,即通过位置或位置范围提取某些字符。如果这不是您使用的唯一格式,您可以使用方法
indexOf
,这将帮助您提取连字符之后的所有内容。我希望它会对你有所帮助,这是我对同一条链所做的一个例子
需要注意的是,在执行 .split() 时,第一个元素从 [0] 开始
如果分隔符未达到结果,则位置[0]将等于原始字符串