如何在Java中拆分字符串

5

我有两种字符串。一种是"abcdEfgh",另一种是"abcd efgh"。这意味着第一个字符串中间有大写字母,而第二个字符串中有空格。那么现在我该如何在Java中检查这两种模式的字符串并创建两个字符串。

String givenString;

if (givenString.equals("abcdEfgh")) {
   String str1 = abcd;
   String str2 = Efgh;
} else (givenString.equals("abcd efgh") {
   String str1 = abcd;
   String str2 = efgh;
}

请提供解决方案,谢谢。


1
String类有一个split方法。例如,使用givenString.split(" ");针对空格进行分割。 - Jack Flamp
3
对于大写字母示例,https://dev59.com/P2865IYBdhLWcg3wkPaD - BackSlash
2
可能是Java:在找到大写字母时拆分字符串的重复问题。 - R. Oosterholt
1
这不是一个重复的问题,因为这个问题涉及到两种情况(大写或空格分隔符),而不仅仅是其中之一。 - vefthym
它是否可以混合“abcdEfgh rest”?总是能找到恰好两个部分吗? - wumpz
3个回答

5
你可以使用正则表达式\\s|(?=[A-Z])进行分割。
  1. \\s用于处理空格的情况。
  2. (?=[A-Z])是正向先行断言。它查找大写字母但保留分隔符以便分割。

.

String givenString;
String split[] = givenString.split("\\s|(?=[A-Z])");
String str1 = split[0];
String str2 = split[1];

对于两种情况

测试用例1

//case 1
givenString = "abcdEfgh";
str1 = abcd
str2 = Efgh

测试用例2

//case 2
givenString = "abcd efgh";
str1 = abcd
str2 = efgh

@RamanSahasi 感谢您的回答。在测试用例1中,我得到了str1 = null和str2 = abcd。 - Pratibha Patil
@PratibhaPatil 我已经编译并测试了这段代码。请查看我的测试用例在线版本 - Raman Sahasi

2

您需要使用 OR 运算符 | 来结合这两个条件。您已经发现按空格分割是用 " " 实现的。大写字母示例已被回答,见Java: Split string when an uppercase letter is found

示例

String one = "abcdEfgh";
String two = "abcd efgh";

System.out.println(Arrays.toString(one.split(" |(?=\\p{Upper})")));
System.out.println(Arrays.toString(two.split(" |(?=\\p{Upper})")));

输出

[abcd, Efgh]
[abcd, efgh]

谢谢Adam,无论是大写还是空格,模式相同吗? - Pratibha Patil
@PratibhaPatil 是的,正如我的示例所示,可以使用相同的模式。 - Adam

0

保持简单,搜索 givenString 中的空格而不是区分大小写的匹配

if(givenString.indexOf(" ") != -1){
    System.out.println( "The string has spaces");
}else{
    System.out.println( "The string has NO spaces");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接