如何在Java中拆分包含空格的字符串(如Python中)
我正在将逗号分隔的列表读入Java,其中的元素可能包括空格和单空格。以下是一些示例行:如何在Java中拆分包含空格的字符串(如Python中),java,python,string,split,Java,Python,String,Split,我正在将逗号分隔的列表读入Java,其中的元素可能包括空格和单空格。以下是一些示例行: ,achieve,achievement,achievable,,, (note the space before the first comma) agree,agreement,, ,agreeable,agreeably (note the space between commas) ,apartment,, (no spaces) 在Jav
,achieve,achievement,achievable,,, (note the space before the first comma)
agree,agreement,, ,agreeable,agreeably (note the space between commas)
,apartment,, (no spaces)
在Java中,使用line.split(“,”
生成的String[]
会将所有空白元素更改为空格,但会忽略尾随元素,如下所示:
" ", "achieve", "achievement", "achievable"
"agree", "agreement", " ", " ", "agreeable", "agreeably"
" ", "apartment"
" ", "achieve", "achievement", "achievable", "", "", ""
"agree", "agreement", "", " ", "agreeable", "agreeably"
"", "apartment", "", ""
str.trim().split("\\s+")
我需要将所有空白元素呈现为空字符串,并将单个空格元素呈现为单个空格,如下所示:
" ", "achieve", "achievement", "achievable"
"agree", "agreement", " ", " ", "agreeable", "agreeably"
" ", "apartment"
" ", "achieve", "achievement", "achievable", "", "", ""
"agree", "agreement", "", " ", "agreeable", "agreeably"
"", "apartment", "", ""
str.trim().split("\\s+")
如何在Java中实现这一点?如果要复制Python的str.split()的精确行为,需要修剪空格,然后使用接受正则表达式的重载来匹配空格,如下所示:
" ", "achieve", "achievement", "achievable"
"agree", "agreement", " ", " ", "agreeable", "agreeably"
" ", "apartment"
" ", "achieve", "achievement", "achievable", "", "", ""
"agree", "agreement", "", " ", "agreeable", "agreeably"
"", "apartment", "", ""
str.trim().split("\\s+")
如果要复制Python的str.split()的确切行为,需要修剪空格,然后使用接受正则表达式的重载来匹配空格,如下所示:
" ", "achieve", "achievement", "achievable"
"agree", "agreement", " ", " ", "agreeable", "agreeably"
" ", "apartment"
" ", "achieve", "achievement", "achievable", "", "", ""
"agree", "agreement", "", " ", "agreeable", "agreeably"
"", "apartment", "", ""
str.trim().split("\\s+")
为避免删除尾随的空元素,请与负值
limit
值一起使用,如
拆分(“,”,-1)
演示:
输出:
" ", "achieve", "achievement", "achievable", "", "", ""
"agree", "agreement", "", " ", "agreeable", "agreeably"
"", "apartment", "", ""
为避免删除尾随的空元素,请与负值
limit
值一起使用,如
拆分(“,”,-1)
演示:
输出:
" ", "achieve", "achievement", "achievable", "", "", ""
"agree", "agreement", "", " ", "agreeable", "agreeably"
"", "apartment", "", ""
如果您想在逗号和任何周围的空格上拆分,可以使用
str.trim().split("\\s+,\\s+")
如果您想在逗号和任何周围的空格上拆分,可以使用
str.trim().split("\\s+,\\s+")
下面是一个简单的测试程序,我认为它说明了您需要什么:
public class s1 {
public static void main( String[] args ) {
// String si = " ,achieve,achievement,achievable,,,";
// String si = "agree,agreement,, ,agreeable,agreeably";
String si = ",apartment,,";
String[] so = si.split(" *, *", -1); /* split on comma and any space(s) next to it */
for (String s : so) {
System.out.println('"' + s + '"');
}
}
}这里有一个简单的测试程序,我认为它说明了您需要什么:
public class s1 {
public static void main( String[] args ) {
// String si = " ,achieve,achievement,achievable,,,";
// String si = "agree,agreement,, ,agreeable,agreeably";
String si = ",apartment,,";
String[] so = si.split(" *, *", -1); /* split on comma and any space(s) next to it */
for (String s : so) {
System.out.println('"' + s + '"');
}
}
}行。split(“,”
的工作原理就像是使用给定表达式和零限制参数调用双参数split方法一样。因此,结果数组中不包括尾随的空字符串
相反,如果您使用public String[]split(String regex,int limit)
并使用line.split(“,”)调用它,以获得更多说明。line.split(“,”)
的工作方式就像调用具有给定表达式和零限制参数的双参数拆分方法一样。因此,结果数组中不包括尾随的空字符串
相反,如果您使用public String[]split(String regex,int limit)
并用line.split(“,”)调用它,以获得更多说明。这会将空白项呈现为单空格字,而不是空字符串,对吗?这会将空白项呈现为单空格字,而不是空字符串,对吗?我想要python的“”。split(“,”)
功能,而不是删除空格。空格需要保留空格,空格需要保留空白。出于某种原因,Java为空白区域插入空格。我想要python的“”。拆分(“,”)
功能,而不是删除空格。空格需要保留空格,空格需要保留空白。出于某种原因,Java为空白区域插入空格。