【问题标题】:How to use split method with stringbuilder together in the same class?如何在同一个类中将 split 方法与 stringbuilder 一起使用?
【发布时间】:2016-03-29 12:02:20
【问题描述】:

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]);

使用拆分 + 字符串生成器的所需输出将是:

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

 455, j*v* str**t

 C*ty (St*t*)

 C**ntry

 575757 

但两者一起它不起作用!甚至可以使用 Split 方法组合 StringBuilder 吗?

【问题讨论】:

  • 你需要在introduction数组上嵌套for循环
  • 使用replaceAll("[aeiouAEIOU]+","*"),然后使用split(":")

标签: java split stringbuilder


【解决方案1】:

我相信你的方法全错了:已经有一个 API 可以在一个易于阅读的代码行中执行此操作:

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

【讨论】:

    【解决方案2】:

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

    我的看法:

    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);
    }
    

    【讨论】:

      【解决方案3】:

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

      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 
      

      【讨论】:

        【解决方案4】:

        之前不要拆分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 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-21
          • 1970-01-01
          相关资源
          最近更新 更多