我是否在Java中过度复杂的简单解决方案?

时间:2017-08-31 20:41:54

标签: java

对于我的Java作业,我需要创建一个返回字符串中第一个单词的脚本,作为第二部分,我还需要返回第二个单词。我目前正在开发第一部分,我想我已经接近了,但我也想知道我是否过度复杂化了我的代码。

public static void statements(){
    Scanner userInput = new Scanner(System.in);
    char [] sentenceArray;
    String userSentence;
    char sentenceResult;
    System.out.print("Enter a complete sentence: ");
    userSentence = userInput.nextLine();
    for(int x = 0; x < userSentence.length(); x++){
        sentenceResult = userSentence.charAt(x);
        sentenceArray = new char[userSentence.length()];
        sentenceArray[x] = sentenceResult;
        if(sentenceArray[x] != ' '){
            System.out.print(sentenceArray[x]);
            //break; This stops the code at the first letter due to != ' '
        }
    }
}

我想我差不多了。目前,我需要工作的是,一旦识别出存在空间,就会退出for循环,但无论如何都打印出整个消息。我只是好奇这是否可以做得更简单一些,也许还有一些我可以做的事情,或者如何完成。

编辑:我能够通过使用split方法完成任务。这就是它现在的样子

    public static void statements(){
    Scanner userInput = new Scanner(System.in);
    String userSentence;
    System.out.print("Enter a complete sentence: ");
    userSentence = userInput.nextLine();
    String [] sentenceArray = userSentence.split(" ");
    System.out.println(sentenceArray[0]);
    System.out.println(sentenceArray[1]);
    }
}

3 个答案:

答案 0 :(得分:1)

就个人而言,我认为你是在思考它。为什么不读取整行并用空格分割字符串?这不是一个完整的解决方案,只是建议你如何获得这些词语。

public static void main(String[] args) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter a complete sentence: ");
    try {
        String userSentence = reader.readLine();
        String[] words = userSentence.split(" ");
        System.out.println(words[0]);
        System.out.println(words[1]);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

答案 1 :(得分:1)

由于这是你的作业,我觉得很难给你代码并为你解决。

似乎你真的过于复杂,而且你知道,所以这是好兆头。

  

我需要创建一个返回字符串中第一个单词的脚本,   而且,作为第二部分,我还需要返回第二个单词

所以,你有一个String个对象,然后检查一下该类的 methods

可以用2行代码解决它,但是:

  1. 你必须知道String类的一个特殊方法,最有用的是能够以某种方式split为你的字符串
  2. 您需要了解java regular expressions - 单词由space
  3. 分隔
  4. 分割string后,你应该得到一个数组,只需要first second元素来访问数组{/ 1}}就足够了

答案 2 :(得分:0)

以下是我的表现。为什么不返回所有字样?

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Add something descriptive here.
 * User: MDUFFY
 * Date: 8/31/2017
 * Time: 4:58 PM
 * @link https://stackoverflow.com/questions/45989774/am-i-over-complicating-a-simple-solution
 */
public class WordSplitter {

    public static void main(String[] args) {
        for (String arg : args) {
            System.out.println(String.format("Sentence: %s", arg));
            List<String> words = getWords(arg);
            System.out.println(String.format("# words : %d", words.size()));
            System.out.println(String.format("words   : %s", words));
        }
    }

    public static List<String> getWords(String sentence) {
        List<String> words = new ArrayList<>();
        if ((sentence != null) && !"".equalsIgnoreCase(sentence.trim())) {
            sentence = sentence.replaceAll("[.!?\\-,]", "");
            String [] tokens = sentence.split("\\s+");
            words = Arrays.asList(tokens);
        }
        return words;
    }
}

当我在命令行上使用此输入运行它时:

"The quick, agile, beautiful fox jumped over the lazy, fat, slow dog!"

这是我得到的结果:

Sentence: The quick, agile, beautiful fox jumped over the lazy, fat, slow dog!
# words : 12
words   : [The, quick, agile, beautiful, fox, jumped, over, the, lazy, fat, slow, dog]

Process finished with exit code 0