假设我有一个像“MikeJackson”这样的字符串,我试图找到一种方法在两者之间放置一个空格,这样它就变成了“迈克杰克逊”。然后将相同的方法应用于另一个字符串,说“JohnBull”会让我回到“John Bull”。这是我提出的代码:
public class Test{
public Test(){
}
public void sep(String s){
s = s + " ";
char[] charArray = s.toCharArray();
int l = s.length();
for (int i = 0; i < l; i++){
char p = ' ';
if(Character.isUpperCase(s.charAt(0))){
continue;
}
else if (Character.isUpperCase(s.charAt(i))){
int k = s.indexOf(s.charAt(i));
charArray[l] = charArray[--l];
charArray[k-1] = p;
}
//System.out.println(s.charAt(i));
}
}
public static void main (String args[]){
Test one = new Test();
one.sep("MikeJackson");
}
}
我的想法是在String中添加一个空格,以便“MikeJackson”成为“Mike Jackson”,然后将字符向右移动(检查我找到大写的位置),忽略第一个大写字母。然后将一个字符''代替字符'J',但将'J'移到右边。这就是我试图用我的方法实现的,但看起来我需要一些指导。如果有人可以帮忙。感谢。
答案 0 :(得分:17)
试试这个:
"MikeJackson".replaceAll("(?!^)([A-Z])", " $1");
对于每个上层字符我都在添加空格。
此外,它适用于多个大写单词。
我Word1 Word2 Word3
获得了Word1Word2Word3
。
答案 1 :(得分:5)
public static void sep(String s) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
result.append(s.charAt(i));
if (i != s.length() -1 && Character.isUpperCase(s.charAt(i + 1))) {
result.append(" ");
}
}
System.out.println(result);
}
如果下一个字符是大写的,只需添加一个空格。
答案 2 :(得分:1)
这里有类似的问题: Insert Space After Capital letter
尝试一下,如果您有任何问题,请告诉我们!
来自参考的代码在这里:
String s = "HelloWorldNishant";
StringBuilder out = new StringBuilder(s);
Pattern p = Pattern.compile("[A-Z]");
Matcher m = p.matcher(s);
int extraFeed = 0;
while(m.find()){
if(m.start()!=0){
out = out.insert(m.start()+extraFeed, " ");
extraFeed++;
}
}
System.out.println(out);
答案 3 :(得分:1)
String foo = "SomeLongName";
System.out.println(foo.replaceAll("([a-z]+)([A-Z])", "$1 $2"));
Some Long Name
中的结果。
答案 4 :(得分:0)
字符串为final
和immutable
,您无法修改它,您将始终使用它来创建新的并分配给任何变量。
就是说,我建议寻找第一个非零索引大写,获取它所在的子串,存储两个子串并在它们之间添加和间隔。
答案 5 :(得分:0)
最简单的方法是在这种情况下使用正则表达式
String str = "MikeJackson";
System.out.println(str.replaceAll("(\\w+?)([A-Z])(\\w+?)", "$1 $2$3"));
收益率:Mike Jackson
答案 6 :(得分:0)
public static String addSpaces(String str) {
StringBuilder sb = new StringBuilder();
if (str.length() == 0) return "";
sb.append(str.charAt(0));
for (int i = 1; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) sb.append(" ");
sb.append(str.charAt(i));
}
return sb.toString();
}