【问题标题】:Java. I want to repeat the words in the string, but something goes wrong in my code爪哇。我想重复字符串中的单词,但我的代码出了点问题
【发布时间】:2021-10-12 02:59:21
【问题描述】:

我只想重复输入字符串中的单词。但是输出的顺序不对。这是我的代码:

  public static String repeatWords(String s, int num){
    StringBuilder sb = new StringBuilder();
    StringBuilder sbtemporary = new StringBuilder();
    int leng = s.length();
    for (int i=0; i < leng; i++){
      char c = s.charAt(i);
      int b = (int) c;
      if (b >= 65 && b <= 90 || b >= 97 && b <= 122){
        sbtemporary.append(c);
      } else if (b == 32){
        sbtemporary.append(" ");
      }
      if (b == 32){
        for (int j = 1; j<= num-1; j++){
          sb = sb.append(" " + sbtemporary);
          sbtemporary.delete(0,sbtemporary.length());
        }
      }
      sb.append(c);
    }
    String str = sb.toString();
    return str;
  }

s 是输入字符串,num 是需要重复的次数。我想要的结果是这样的:

  When the input is : "How are you? I am fine."  
  The output should be like: "How How are are you you?"

但是我的代码的结果是:

"How How  are are  you? you  I I  am am  fine."

我真的不知道哪里出了问题,请问有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: java string debugging drjava


    【解决方案1】:
        System.out.println((int) "?".charAt(0)); //63
        System.out.println((int) ".".charAt(0)); //46
    

    “?”和 ”。”不要附加到 sbtemporary。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    更正的代码:-

    public static String repeatWords(String s, int num){
        StringBuilder sb = new StringBuilder();
        StringBuilder sbtemporary = new StringBuilder();
        int leng = s.length();
        for (int i=0; i < leng; i++){
          char c = s.charAt(i);
          int b = (int) c;
          if (b >= 65 && b <= 90 || b >= 97 && b <= 122){
            sbtemporary.append(c);
          }
          if (b == 32 && sbtemporary.length() != 0){
            for (int j = 1; j<= num-1; j++){
              sb.append(" " + sbtemporary);
            }
            sbtemporary.delete(0,sbtemporary.length());
          }
          sb.append(c);
        }
        String str = sb.toString();
        return str;
      }
    

    变化:-

    1. 删除了 else if (b == 32) 部分,您在其中将空间附加到 sbtemporary。
    2. 删除 j 循环外 sbtemporary 的内容,否则仅对 num == 2 有效。
    3. 如果 sbtemporary 不为空,则在 if 条件 b == 32 中再添加一个条件。

    【讨论】:

      【解决方案3】:

      添加此检查,并将重复部分添加到 sbtemporary。 System.out.println(repeatWords(str, 1));

      if ( b == 63) {
          sb = sb.append(" " + sbtemporary);
          sb.append(c);
          break;  
      }
      
      if (b == 63) {                  
         for (int j = 1; j<= num; j++){
            sb.append(" " + sbtemporary);
         }
      
         sb.append(c);
          break;
      }
       
      public static String repeatWords(String s, int num) {
              StringBuilder sb = new StringBuilder();
              StringBuilder sbtemporary = new StringBuilder();
              int leng = s.length();
      
              for (int i = 0; i < leng; i++) {
                  char c = s.charAt(i);
                  int b = (int) c;
      
                  if (b == 63) {                  
                      for (int j = 1; j<= num; j++){
                         sb.append(" " + sbtemporary);
                      }
                      
                      sb.append(c);
                      break;
                  }
      
                  if (b >= 65 && b <= 90 || b >= 97 && b <= 122) {
                      sbtemporary.append(c);
                  } 
      
                  if (b == 32 && sbtemporary.length() != 0){
                      for (int j = 1; j<= num; j++){
                        sb.append(" " + sbtemporary);
                      }
                      sbtemporary.delete(0,sbtemporary.length());
                    }
                    sb.append(c);
              }
      
              String str = sb.toString();
              return str;
          }
       
      

      【讨论】:

        【解决方案4】:

        您可以简单地这样做,

        String content =  "How are you? I am fine.";
        String[] words = content.split("\\s"); // `\\s` preserves any 2 or more repeated spaces
        
        StringBuilder builder = new StringBuilder();
        for(String word : words) {
            for(int i = 0; i < n; i++) { // n is the no. of times to repeat the word
                builder.append(word).append(" ");
            }
        }
        
        System.out.printf("Repeated String : %s", builder.toString().trim());
        

        Java8 更整洁的方式,这里Collections.nCopies(n, word) 只是简单地返回一个单词重复n 次的列表,将其转换为单个String,以空格分隔,最终,所有这些重复的字符串都被转换在一个由空格分隔的最终结果字符串中。

        String content =  "How are you? I am fine.";
        String[] words = content.split("\\s");
        
        String result = Arrays.stream(words)
                        .map(word -> String.join(" ", Collections.nCopies(n, word)))
                        .collect(Collectors.joining(" ")); //n is the no. of times to repeat the word
        System.out.printf("Repeated String : %s", result);
        

        【讨论】:

          猜你喜欢
          • 2013-04-07
          • 2015-04-23
          • 2019-12-18
          • 2016-09-30
          • 1970-01-01
          • 2022-11-03
          • 2017-06-10
          • 2021-01-02
          • 1970-01-01
          相关资源
          最近更新 更多