不使用数组和特殊方法,如何制作nthWord方法?

时间:2019-03-08 00:57:41

标签: java

在不使用数组和特殊方法(例如split方法的情况下),我该如何编写以下方法:输入int表示假定为正数的数字n,并且输出字符串包含输入字符串的第n个单词,从第一个单词开始,以一个空格隔开。

这是我到目前为止所拥有的:

public static String nthWord(int n, String s1) {

    StringBuilder sb = new StringBuilder();
    for(int x = 0; x < s1.length(); x = x + n) {
      sb.append(s1.charAt(x));
    }
    return sb.toString();
}

例如,输入:

  

HW2.nthWord(3,“零一二三四有五六七”)

应输出:

  

“零三六”

但是我当前的方法输出:

  

“ zon t heo vs v”

2 个答案:

答案 0 :(得分:2)

您需要检查字符串的每个字符以找到空格以识别单词。因此,您只是一个开始,但是您需要:

  1. 仅将x递增1。
  2. 对于每个字符,请检查它是否为空格,并跟踪您在哪个单词上。
  3. 当您敲空格时,请增加字计数器(如果它是n的倍数,则将其重置为0)
  4. 当单词计数器为0时,将字符添加到字符串中。

答案 1 :(得分:0)

只需跟踪最后一个字符和单词索引即可。逻辑很简单。

  • 遍历所有字符
  • 如果最后一个字符是空格,而当前字符不是 空格,那就是一个新单词(单词增量索引)。
  • 如果单词索引可以被n整除,那就是您想要的单词。
  • 遇到所需单词(不是第一个)时,请输入 空间。
  • 如果您要使用当前单词,请附加当前字符。
  • 记住要更新最后一个字符

代码:

 public static String nthWord(int n,String s1)
 {
     StringBuilder sb = new StringBuilder();
     char lastChar = ' ';
     int wordIndex = -1;
     for(int i = 0 ; i < s1.length(); i++)
     {
         char c = s1.charAt(i);

         if(c != ' ' && lastChar == ' ')
         {
             wordIndex++;
             if(wordIndex > 0 && ((wordIndex % n) == 0))
             {
                 sb.append(' ');
             }
         }
         if(c != ' ' && ((wordIndex % n) == 0))
         {
             sb.append(c);
         }
         lastChar = c;
     }
     return sb.toString();
 }