优化代码。搜索字符串

时间:2012-09-09 19:46:36

标签: java string

所以我的代码是用于家庭作业,用户输入一个句子(字符串),我需要搜索字符串并返回最小的单词。但是,必须在字符串的第一个位置输入一个数字。例如:“4这是什么”。输出应为“IS”并忽略该数字。我弄清楚如何忽略这个数字的唯一方法是让循环跳过数字所在的第一个位置。它可以单独工作,但每当我把它放入我的程序的其余部分时它就会停止工作。反正有没有让这个程序更清洁?

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // Lexicographically smallest word
    String TheSentence = sc.nextLine();
    String[] myWords = TheSentence.split(" ");
    int shortestLengths, shortestLocation;
    shortestLengths = (myWords[1]).length();
    shortestLocation = 1;
    for (int i = 1; i < myWords.length; i++) {
        if ((myWords[i]).length() < shortestLengths) {
            shortestLengths = (myWords[i]).length();
            shortestLocation = i;
        }
    }
    System.out.println(myWords[shortestLocation]);
}

4 个答案:

答案 0 :(得分:1)

for循环内(应该从i = 0开始),添加如下代码:

try {
  double value = Double.parseDouble(myWords[i]);
} catch (NumberFormatException e) {
  // add the rest of your code here
}

这个想法是你尝试将你的单词转换为数字,如果你失败了,这意味着它不是一个数字,所以你可以在单词上使用长度逻辑。

答案 1 :(得分:0)

您应该做的第一件事是创建您想要使用的函数,而不是将exercice的相关代码与从输入流中读取一行等内容混合。

您可以使用Character.isLetter(char)测试某个字符是否为字母。 一个很好的练习是仅使用该函数构建解决方案并在循环中单独查看每个字符(String.charAt(int)方法)。 解决方案是记住当前最短单词的开始位置和长度。


在实践中,我会使用这样的正则表达式:

public static String shortestWord(String sentence) {
  String shortest = null;
  Pattern word = Pattern.compile("\\w+");
  Matcher m = word.matcher(sentence);
  while (m.find()) {
    String candidate = m.group();
    if (shortest == null || shortest.length() > candidate.length())
      shortest = candidate;
  }
  return shortest;
}

答案 2 :(得分:0)

您可以尝试使用子字符串,例如

String result=inputString.substring(1)

'1'是字符串中的第二个字母,substring返回第一个保存的值。

答案 3 :(得分:0)

以下基本上只是缩短你的代码..除此之外它没有太大变化。话虽这么说。在一个名为shortestWord()或其他东西的方法中创建所有这些会好得多。下面的代码实际上没有理由不起作用。

修订代码:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String[] myWords = (sc.nextLine()).split(" ");
    int shortestLocation = 1
    for (int i = 2; i < myWords.length; i++) { // No reason to start at 1 as you have
                                               // already made shortestLocation = 1
        if (myWords[i].length() < myWords[shortestLocation].length()) {
            shortestLocation = i;
        }
    }
    System.out.println(myWords[shortestLocation]);
}

建议代码:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String[] myWords = (sc.nextLine()).split(" ");
    System.out.println("The shortest word is: " + shortestWord(myWords));
}

public static String shortestWord(String[] myWords) {
    int shortestLocation = 1
    for (int i = 2; i < myWords.length; i++) { // No reason to start at 1 as you have
                                               // already made shortestLocation = 1
        if (myWords[i].length() < myWords[shortestLocation].length()) {
            shortestLocation = i;
        }
    }
    return myWords[shortestLocation];
}