如何在同一个 class 中将 split 方法与 stringbuilder 一起使用?

How to use split method with stringbuilder together in the same class?

用于隐藏元音的 StringBuilder:

String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
StringBuilder sb = new StringBuilder(bienvenue_intro);
String[] introduction = bienvenue_intro.split(":"); 
for (int i = 0; i < bienvenue_intro.length(); i++) {
    char c = bienvenue_intro.charAt(i);
    if ((c == 'A') || (c == 'a') ||
        (c == 'E') || (c == 'e') ||
        (c == 'I') || (c == 'i') ||
        (c == 'O') || (c == 'o') ||
        (c == 'U') || (c == 'u')) {
            sb.setCharAt(i, '*');
    }
}
System.out.println(bienvenue_intro);
System.out.println(sb.toString());

以上代码的输出为:

Welcome! Java First Semester: 455, java street: City (State): Country: 575757 
 W*lc*m*! J*v* F*rst S*m*st*r: 455, j*v* str**t: C*ty (St*t*): C**ntry: 575757 

分割断行的方法:

for (int i = 0; i < introduction.length; i++)
    System.out.println(introduction[i]);

使用 split + string builder 的期望输出为:

W*lc*m*! J*v* F*rst S*m*st*r

 455, j*v* str**t

 C*ty (St*t*)

 C**ntry

 575757 

但是两者结合起来不行!甚至可以将 StringBuilder 与 Split 方法组合在一起吗?

之前的String不要拆分,先到改造。 StringBuilder 将为您执行就地字符替换并使用 toString() 获取替换的字符串并对其执行拆分。

String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
StringBuilder sb = new StringBuilder(bienvenue_intro);

for (int i = 0; i < bienvenue_intro.length(); i++) {
  char c = bienvenue_intro.charAt(i);
  if (   (c == 'A') || (c == 'a')
      || (c == 'E') || (c == 'e')
      || (c == 'I') || (c == 'i')
      || (c == 'O') || (c == 'o')
      || (c == 'U') || (c == 'u')) {
    sb.setCharAt(i, '*');
  }
}
System.out.println(bienvenue_intro);
//System.out.println(sb.toString());

String[] introduction = sb.toString().split(":");  //<-- Do the split here after replacements.
for (String string : introduction) {
  System.out.println(string);
}

输出:

 W*lc*m*! J*v* F*rst S*m*st*r
 455, j*v* str**t
 C*ty (St*t*)
 C**ntry
 575757 

有一种更好更简单的方法:)

replaceAll()split().

public static void main(String[] args) {
    String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
    String[] arr = bienvenue_intro.replaceAll("(?i)[aeiou]+", "*").split(":");

    for(String s : arr) {
        System.out.println(s);
    }
}

 W*lc*m*! J*v* F*rst S*m*st*r
 455, j*v* str*t
 C*ty (St*t*)
 C*ntry
 575757 

我想扩展@YoungHobbit 给出的答案。我不是专家,但这些是我的观察:

  • 不需要使用StringBuilder。在这里阅读更多:when to use StringBuilder in java
  • 您可以使用正则表达式进行转换。在这里阅读更多:How to replace replace vowels with a special character in Java?

我的看法:

String bienvenue_intro = " Welcome! Java First Semester: 455, java street: City (State): Country: 575757 ";
String mod_str = bienvenue_intro.replaceAll( "(?i)[aeiou]", "*" );
String[] introduction = mod_str.split(":");
for (String string : introduction) {
  System.out.println(string);
}

我认为您的方法完全错误:已经有一个 API 可以在一个易于阅读的代码行中执行此操作:

System.out.println(bienvenue_intro.replaceAll("[aeiouAEIOU]", "*").replace(":", "\n"));