执行简单字符串操作的Java程序不起作用

时间:2013-10-11 13:01:10

标签: java

我必须做一个java实验室,它将输入一个输入的句子并创建一个只包含以元音开头的单词的新字符串。

示例:

  

输入:这是一个炎热潮湿的夏日。

     

输出:Itisaand。

编辑:我得到的输出是anananananan。

这是我的代码(带注释)。方法很简单。我只是不确定为什么这不起作用。

import java.util.*;

public class Driver {

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.print("Input: ");
        String input = console.nextLine();
        Class strings = new Class(input);
        // class has constructor for input
        int beg = 0, end = 0;
        for (int j = 0; j < input.length(); j++) {
            if (strings.isVowel(j) && (input.charAt(j - 1) == ' ' || j == 0))
                beg = j;
            // isVowel finds if there is a vowel at the location
            else if (strings.endWord(j))
                end = j - 1;
            // endWord finds if there is a space or punctuation at the location

            if (beg == end - 2)
                strings.findWord(beg, end);
            // findWord adds a substring of input from beg to end to the answer
        }
        System.out.print("\nOutput: ");
        strings.printAnswer();
        // printAnswer prints the answer
    }
}

编辑:这是我班级的代码。

public class Class {

    String input = "", answer = "";

    public Class(String input1) {
        input = input1;
    }

    public boolean isVowel(int loc) {
        return (input.charAt(loc) == 'a' || input.charAt(loc) == 'e' || input.charAt(loc) == 'i'
                || input.charAt(loc) == 'o' || input.charAt(loc) == 'u');
    }

    public boolean endWord(int loc) {
        return (input.charAt(loc) == ' ' || input.charAt(loc) == '.' || input.charAt(loc) == '?'
                || input.charAt(loc) == '!');
    }

    public void findWord(int beg, int end) {
        answer = answer + (input.substring(beg, end));
    }

    public void printAnswer() {
        System.out.println(answer + ".");
    }

}

3 个答案:

答案 0 :(得分:0)

可能还有其他问题,但逻辑上最直接的问题是这一部分:

if(beg==end-2)
    strings.findWord(beg, end);

这只会识别两个字符,所以即使它们有效,也不会匹配“a”或“and”。

答案 1 :(得分:0)

input.charAt(j - 1)j时,

0会抛出IndexOutOfBoundsException

答案 2 :(得分:0)

我不会为你编写java代码,但会为你提供合乎逻辑的步骤。

while(true)
    start = input.indexOf(" ")
    if(start == -1)
        break
    end = input.index of(" ", start)
    if(end == -1)
        word = input.substr(start, input.length-1)
    else
        word = input.substr(start, end)
    if first letter of word is a vowel
        save it
    if(end == -1)
        break

你的逻辑是绝对正确的,但不是解决问题的最佳方法

编辑:

对于你来说,解决方案很简单。

你可以做到

if(beg < end)

一切都会奏效。