初学者程序员:Java String Manipulation

时间:2014-06-06 03:04:21

标签: java string

有人能告诉我这里做错了什么吗?我试图显示星号的位置,但我一直得到1。

包proj2; import java.util.Scanner;

/**
 * <p> Title: Project 2: String Manipulation </p>
 * <p> Description: Ask the user to enter a URL and it will display
 * the protocol, domain name and file name specified. </p>
 * @author Mario Mendoza
 *
 */

public class Project2 {
    /**
     * 
     * @param args arguments
     */
    public static void main(String[] args ) {
        Scanner s = new Scanner(System.in );
        String sentence;
        String word1;
        String word2;
        String word3;
        String word4;
        String asterisks1 = "*";
        String asterisks2 = "*";
        String asterisks3 = "*";
        int firstWord;
        int secondWord;
        int thirdWord;
        int fouthWord;
        int wordLength1;
        int wordLength2;
        int wordLength3;
        int wordLength4;
        int positionOfAsterisks1;
        int positionOfAsterisks2;
        int positionOfAsterisks3;
        char firstLetter;
        int total;


        word1 = s.next();
        word2 = s.next();
        word3 = s.next();
        word4 = s.next();


        System.out.println("You typed " + word1 + asterisks1 + word2 + asterisks2 + word3 + asterisks3 + word4);

        sentence = new String(word1 + asterisks1 + word2 + asterisks2 + word3 + asterisks3 + word4);

        wordLength1 = word1.length();
        System.out.println(word1 + " has length " + wordLength1);
        wordLength2 = word2.length();
        System.out.println(word2 + " has length " + wordLength2);
        wordLength3 = word3.length();
        System.out.println(word3 + " has length " + wordLength3);
        wordLength4 = word4.length();
        System.out.println(word4 + " has length " + wordLength4);

        positionOfAsterisks1 = sentence.indexOf(asterisks1);
        positionOfAsterisks2 = sentence.indexOf(asterisks2);
        positionOfAsterisks3 = sentence.indexOf(asterisks3);
        System.out.println("The asterisks were found at position " + positionOfAsterisks1 + ", " + positionOfAsterisks2 + ", and " + positionOfAsterisks3);
    }
}

让您的程序执行以下任务:  提示用户输入仅包含四个单词的String,仅分隔 用星号。输入字符串不应包含任何空格。这种类型的一个例子 这个程序将收到的输入是我*爱*计算机*科学。显示 用户的输入(作为用户确认程序理解输入)。  分别存储四个单词中的每个单词。  显示每个单词的长度。例如: 我的长度是1。 爱有长度4。 电脑长8。 科学长度为7。  显示原始字符串中星号的位置。例如: 在第1,6和15位发现了星号。  显示第一个单词的最后一个字母。  显示四个单词的总聚合长度。 此外,请确保在文件顶部包含一个JavaDoc注释,其中包括 程序的标题,描述和作者姓名。 4样品运行 你打字我爱*计算机*科学。 我的长度是1。 爱有长度4。 电脑长8。 科学长度为7。 在第1,6和15位发现了星号。 第一个单词的最后一个字母是I. 这四个单词的总长度为20个字母。

2 个答案:

答案 0 :(得分:0)

问题是您总是在给定字符串中搜索相同的值,即*。你对变量的命名并不重要,你实际上是在运行这行3次:

positionOfAsterisks1 = sentence.indexOf('*');使用3个不同的变量,但每次都会返回1.这是因为每次重新开始时,都会点击第一个星号,然后返回true。

您需要做的是使用第二个参数,即从开始的位置。

positionOfAsterisks1 = sentence.indexOf(asterisks1);
int temp = positionOfAsterisks1 + 1;
positionOfAsterisks2 = sentence.indexOf(asterisks1,temp);
temp = positionOfAsterisks2 + 1;
positionOfAsterisks3 = sentence.indexOf(asterisks1,temp);

这是做什么

第一行返回值1.下一行将temp设置为2.现在搜索从第三位置开始(因为数组索引从0开始),并且因此不包括第一个星号。然后它会点击第7个字符*并返回6.再次将temp设置为7,再次搜索从第8个字符开始,然后继续直到它在15处再次到达星号。

注意

您不需要使用3个单独的变量来保持相同的*,这只是浪费空间。我建议使用相同的变量并消除其他两个变量!

答案 1 :(得分:0)

public static void main(String[] args ) {
        Scanner s = new Scanner(System.in );
        String sentence;
        String word1;
        String word2;
        String word3;
        String word4;

        word1 = s.next();
        word2 = s.next();
        word3 = s.next();
        word4 = s.next();

        System.out.println("You typed " + word1 + "*" + word2 + "*" + word3 + "*" + word4);

        sentence = new String(word1 + "*" + word2 + "*" + word3 + "*" + word4);

        System.out.println(word1 + " has length " + word1.length());
        System.out.println(word2 + " has length " + word2.length());
        System.out.println(word3 + " has length " + word3.length());
        System.out.println(word4 + " has length " + word4.length());

        System.out.print("The asterisks were found at position ");

        // get the position of * and store the position index
        int i = 0;
        String positionOfAsterisks = "";
        while (i < sentence.length()){
            if (sentence.charAt(i) == '*')
                positionOfAsterisks += i + ", ";
            i++;
        }
        // remove the last comma and empty space then add in full stop
        positionOfAsterisks = positionOfAsterisks.substring(0, positionOfAsterisks.length()-2);
        positionOfAsterisks += "." ;
        System.out.print(positionOfAsterisks);
    }

我没有使用indexOf,而是使用循环来遍历你的&#39;句子。另外,我删除了无用变量的声明。

IndexOf将仅返回它从第一个索引中找到的索引(如果它未在方法的第二个arg中声明)。而IndexOf方法将第一个位置返回为1而不是0。