我需要用空格分割我的字符串。 为此我试过:
str = "Hello I'm your String";
String[] splited = str.split(" ");
但这似乎并不奏效。
我需要用空格分割我的字符串。 为此我试过:
str = "Hello I'm your String";
String[] splited = str.split(" ");
但这似乎并不奏效。
当前回答
试试这个
String str = "This is String";
String[] splited = str.split("\\s+");
String split_one=splited[0];
String split_second=splited[1];
String split_three=splited[2];
Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);
其他回答
使用Stringutils.split()按白色步长分割字符串。例如StringUtils。split("Hello World")返回"Hello"和"World";
为了解决上述情况,我们采用了这样的分割方法
String split[]= StringUtils.split("Hello I'm your String");
当我们打印拆分数组时,输出将是:
你好
I'm
your
字符串
完整的示例演示检查这里
因为这些答案已经发布了一段时间了,下面是另一种更流行的回答方法:
List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
while (sc.hasNext()) output.add(sc.next());
}
现在你有了一个字符串列表(可以说比数组更好);如果你确实需要一个数组,你可以做输出。toArray(新的字符串[0]);
下面是一个非常简单的例子:
希望能有所帮助。
String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String
不仅是空白,我的解决方案也解决了看不见的字符。
str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");
虽然接受的答案很好,但请注意,如果您的输入字符串以空白开始,那么您将以一个前导空字符串结束。例如,使用:
String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");
结果将是:
splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";
所以你可能想要在分割字符串之前修剪它:
String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");
(编辑)
除了修剪警告之外,您可能还想考虑unicode不间断空格字符(U+00A0)。这个字符打印出来就像字符串中的常规空格一样,通常隐藏在富文本编辑器或web页面复制粘贴的文本中。它们不会被.trim()处理,该方法使用c <= ' '测试要删除的字符;他们也抓不到他们。
相反,你可以使用\p{Blank},但你需要启用unicode字符支持,这是常规分割不会做的。例如,这将工作:Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words),但它不会做修剪部分。
下面演示了该问题并提供了解决方案。依赖regex来实现这一点远不是最优的,但现在Java有了8位/ 16位字节表示,有效的解决方案变得相当长。
public class SplitStringTest
{
static final Pattern TRIM_UNICODE_PATTERN = Pattern.compile("^\\p{Blank}*(.*)\\p{Blank}$", UNICODE_CHARACTER_CLASS);
static final Pattern SPLIT_SPACE_UNICODE_PATTERN = Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS);
public static String[] trimSplitUnicodeBySpace(String str)
{
Matcher trimMatcher = TRIM_UNICODE_PATTERN.matcher(str);
boolean ignore = trimMatcher.matches(); // always true but must be called since it does the actual matching/grouping
return SPLIT_SPACE_UNICODE_PATTERN.split(trimMatcher.group(1));
}
@Test
void test()
{
String words = " Hello I'm\u00A0your String\u00A0";
// non-breaking space here --^ and there -----^
String[] split = words.split(" ");
String[] trimAndSplit = words.trim().split(" ");
String[] splitUnicode = SPLIT_SPACE_UNICODE_PATTERN.split(words);
String[] trimAndSplitUnicode = trimSplitUnicodeBySpace(words);
System.out.println("words: [" + words + "]");
System.out.println("split: [" + Arrays.stream(split).collect(Collectors.joining("][")) + "]");
System.out.println("trimAndSplit: [" + Arrays.stream(trimAndSplit).collect(Collectors.joining("][")) + "]");
System.out.println("splitUnicode: [" + Arrays.stream(splitUnicode).collect(Collectors.joining("][")) + "]");
System.out.println("trimAndSplitUnicode: [" + Arrays.stream(trimAndSplitUnicode).collect(Collectors.joining("][")) + "]");
}
}
结果:
words: [ Hello I'm your String ]
split: [][Hello][I'm your][String ]
trimAndSplit: [Hello][I'm your][String ]
splitUnicode: [][Hello][I'm][your][String]
trimAndSplitUnicode: [Hello][I'm][your][String]