【问题标题】:return the first word in any string (Java)返回任何字符串中的第一个单词(Java)
【发布时间】:2015-05-14 01:03:12
【问题描述】:

我必须能够输入任意两个单词作为字符串。调用一个接受该字符串并返回第一个单词的方法。最后显示那个词。

该方法必须是 for 循环方法。我有点知道如何使用子字符串,并且我知道如何通过使用 .substring(0,x) x 作为第一个单词的长度来返回第一个单词。

我怎样才能使它无论我使用什么短语来表示字符串,它总是返回第一个单词?请解释一下你是做什么的,因为这是我在 CS 课上的第一年。谢谢!

【问题讨论】:

  • 第一个单词按什么顺序排列?

标签: java string


【解决方案1】:

我必须能够输入任意两个单词作为字符串

The zero, one, infinity design rule 说没有两个这样的东西。让我们设计它来处理任意数量的单词。

String words = "One two many lots"; // This will be our input

然后调用并显示方法返回的第一个单词,

所以我们需要一个接受一个字符串并返回一个字符串的方法。

// Method that returns the first word
public static String firstWord(String input) {
    return input.split(" ")[0]; // Create array of words and return the 0th word
}

static 让我们从 main 调用它,而无需创建任何实例。 public 可以让我们根据需要从另一个类调用它。

.split(" ") 创建一个以每个空格分隔的字符串数组。 [0] 索引该数组并给出第一个单词,因为 java 中的数组是零索引的(它们从 0 开始计数)。

并且方法必须是for循环方法

啊,废话,那么我们必须努力做到这一点。

// Method that returns the first word
public static String firstWord(String input) {
    String result = "";  // Return empty string if no space found

    for(int i = 0; i < input.length(); i++)
    {
        if(input.charAt(i) == ' ')
        {
            result = input.substring(0, i);
            break; // because we're done
        }
    }

    return result; 
}

我有点知道如何使用子字符串,并且我知道如何通过使用 .substring(0,x) x 作为第一个单词的长度来返回第一个单词。

就是这样,使用你提到的那些方法和 for 循环。你还想要什么?

但是我怎样才能让它不管我用什么短语来表示字符串,它总是返回第一个单词呢?

伙计,你很挑剔:) 好吧:

// Method that returns the first word
public static String firstWord(String input) {
    String result = input;  // if no space found later, input is the first word

    for(int i = 0; i < input.length(); i++)
    {
        if(input.charAt(i) == ' ')
        {
            result = input.substring(0, i);
            break;
        }
    }

    return result; 
}

把它们放在一起看起来像这样:

public class FirstWord {

    public static void main(String[] args) throws Exception
    {
        String words = "One two many lots"; // This will be our input
        System.out.println(firstWord(words)); 
    }

    // Method that returns the first word
    public static String firstWord(String input) {

        for(int i = 0; i < input.length(); i++)
        {
            if(input.charAt(i) == ' ')
            {
                return input.substring(0, i);
            }
        }

        return input; 
    }    
}

它会打印这个:

One

嘿等等,你改变了那里的 firstWord 方法。

是的,我做到了。这种风格避免了对结果字符串的需要。从未习惯于垃圾收集语言或使用finally 的老程序员不赞成多次返回。他们想要一个地方来清理他们的资源,但这是 java,所以我们不在乎。你应该使用哪种风格取决于你的导师。

请解释一下你是做什么的,因为这是我在 CS 课上的第一年。谢谢!

我该怎么办?我发帖真棒! :)

希望对你有帮助。

【讨论】:

  • "static 让我们从 main 调用它" 虽然我不会这样定义它。我见过很多来自新程序员的静态滥用。
  • @LachlanGoodhew-Cook 注明并修订。你现在觉得我怎么样?
  • 现在不能再 +1 你吗?
  • @LachlanGoodhew-Cook 如果你真的很难点击? :)
【解决方案2】:
String line = "Hello my name is...";
int spaceIndex = line.indexOf(" ");
String firstWord = line.subString(0, spaceIndex);

因此,您可以将 line 视为字符数组。因此,line.indexOf(" ") 获取行变量中空间的索引。然后,子字符串部分使用该信息来获取导致 spaceIndex 的所有字符。因此,如果空间索引为 5,则子字符串方法将返回 0、1、2、3、4 的索引。因此,这将返回您的第一个单词。

【讨论】:

  • 虽然这个答案可能是正确且有用的,但最好在其中附上一些解释来解释它如何帮助解决问题。如果有更改(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。
【解决方案3】:

第一个单词可能是第一个空格之前的子字符串。所以写:

int x = input.indexOf(" ");

但是如果没有空间怎么办? x 将等于 -1,因此您需要将其调整到输入的最后:

if (x==-1) { x = input.length(); }

然后在您的子字符串方法中使用它,就像您计划的那样。现在您只需要处理input 是空白字符串"" 的情况,因为在这种情况下没有第一个单词。

【讨论】:

    【解决方案4】:

    由于您没有指定顺序和您认为的单词,我假设您要检查给定的句子,直到第一个空格。

    简单地做

    int indexOfSpace = sentence.indexOf(" ");
    firstWord = indexOfSpace == -1 ? sentence : sentence.substring(0, indexOfSpace);
    

    请注意,如果句子中没有空格,这将给出IndexOutOfBoundException

    另一种选择是

    String sentences[] = sentence.split(" ");
    String firstWord = sentence[0];
    

    如果你真的需要一个循环,

    String firstWord = sentence;
    for(int i = 0; i < sentence.length(); i++)
    {
        if(sentence.charAt(i) == ' ')
        {
            sentence = firstWord.substring(0, i);
            break;
        }
    }
    

    【讨论】:

      【解决方案5】:

      您可以使用String.indexOf(String str) 获取输入字符串中“空格”字符的位置,它返回传递给方法的字符串第一次出现的索引。

      例如:

      int spaceIndex = input.indexOf(" ");
      String firstWord = input.substring(0, spaceIndex);
      

      【讨论】:

        【解决方案6】:

        也许这可以帮助您找出解决问题的方法。该网站上的大多数用户不喜欢为学生做作业,在您提出问题之前,请务必查看您的 ISC 书籍示例。他们真的很有帮助。

        String Str = new String("Welcome to Stackoverflow");
        
        System.out.print("Return Value :" );
        System.out.println(Str.substring(5) );
        
        System.out.print("Return Value :" );
        System.out.println(Str.substring(5, 10) );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-05-14
          • 1970-01-01
          • 1970-01-01
          • 2017-10-29
          • 1970-01-01
          • 2019-03-30
          • 1970-01-01
          相关资源
          最近更新 更多