java 返回 整数 指定 的 字

vaqhlq81  于 2022-11-20  发布在  Java
关注(0)|答案(5)|浏览(163)

我知道我错过了一些东西,这是我真正需要的帮助。代码不工作,在所有情况下,我正在寻找帮助改善/修复它。
任务:

我目前拥有的代码:

public String word(int num, String words)
{
    int l = words.indexOf(" ");
    int r = words.indexOf(" ", l+1);

    for(int i = 3; i <= num; i++){

     l = r;
     r = words.indexOf(" ", l+1);

    //if(i != num)
//  l = r;

    }       
String theword = words.substring(l,r);
    return theword;

}
}
62lalag4

62lalag41#

由于这显然是家庭作业,我将只给予你文字。
您的方法最终可能会奏效,但它非常费力且过于复杂,因此很难调试,也很难做对。

  • 通过split()方法使用String的API
  • 将句子拆分成单词串数组后,返回num处的元素减1(数组从零开始索引
  • 首先检查数组的长度,如果字少于num,则采取您认为合适的操作

对于第2部分,简单形式的解决方案可以是:

  • 为结果创建新的空字符串
  • 循环访问给定字符串的字符,将该字符添加到结果字符串的 front
  • 使用String的toUpperCase()方法
pvcm50d1

pvcm50d12#

因为这是家庭作业,你已经表现出了一些努力。这是你如何做你的问题的第一部分。这个代码是相当明显的。
1)如果数字大于字符串中的单词数,则返回null,因为我们不希望用户在字符串中只有2个单词时输入5
2)按空格拆分字符串,基本上返回包含用户指定数字的数组
还有更多的条件你必须弄清楚,如告诉用户输入一个数字的字符串长度,因为它不会给予他任何结果,并采取输入从Scanner,而不是直接添加输入的方法。

public static String word(int num, String words)
{
  String wordsArr[] = words.split(" ");

  if(num <= 0 || num > wordsArr.length) return null;

  return (wordsArr[num-1]);

}

你的问题的第二部分必须由你来尝试。

tktrz96b

tktrz96b3#

嗯......你很少看到有人带着家庭作业来这里,同时表现出努力,所以太棒了:)。
这是一个如何拆分字符串并从该字符串返回[x]元素的示例

public class SO {

    public static void main(String[] args) throws Exception {
        int number = 3;
        String word = "Hello this is sample code"; 

        SO words = new SO();
        words.returnWord(number, word);
    }
    private void returnWord(int number, String word) throws Exception {
        String[] words = word.split("\\s+");
        int numberOfWords = words.length;

        if(numberOfWords >= number) {
            System.out.println(words[number-1]);
        } else {
            throw new Exception("Not enought words!!!");
        }
    }
}

是的,这是一个工作的例子,但不要只是复制和粘贴你的家庭作业-作为简单的问题,从老师-这是什么做,或这是如何工作,你出来:)!所以理解代码,并尝试修改它的方式,你熟悉什么是做什么。也值得得到一些Java书籍-我推荐头第一Java由O '真的〈- v.好初学者的书!
如果你有任何问题,请一定要问!。注意这个答案不是100%符合教科书的要求,所以你可以相应地修改这个代码。
从第2部分开始。波西米亚人说的也可以,但是有更快的解决办法。
StringBuilder();要将字符串转换为所有字母都是大写,可以在此反转字符串上使用.toUpperCase()方法:)

wnvonmuf

wnvonmuf4#

您可以尝试:

public class trial {
        public static void main(String[] args) 
        {
            System.out.println(specificword(0, "yours faithfully kyobe"));
            System.out.println(reverseString("derrick"));}
        
        public static String specificword(int number, String word){
            //split by space
            String [] parts = word.split("\\ ");
            if(number <= parts.length){
                return parts[number];
            }
            else{
                return "null String";
            }
        }
    
        public static String reverseString(String n){
            String c ="";
            for(int i = n.length()-1; i>=0; i--){
                char m = n.charAt(i);
                c = c + m;
            }
            String m = c.toUpperCase();
            return m;
        }
    }
hsgswve4

hsgswve45#

对于第一个问题,我会给予你两种方法(1.推荐):
1.使用String.split方法将单词拆分为单词数组,其中每个元素都是一个单词。它将创建一个单词数组,如[hello, my, name, is, Michael],而不是一个包含所有单词的字符串,非常简单:

public static String word(int num, String words)
{
    // split words string into array by the spaces
    String[] wordArray = words.split(" "); // or = words.split("\\s+");

    // if the number is within the range
    if (num > 0 && num <= wordArray.length) {
        return wordArray[num - 1]; // return the word from the word array
    } else { // the number is not within the range of words
        return null;
    }
}

1.**只有在无法使用数组时才使用此方法!**在单词中循环,直到找到足够的空格来匹配要查找的单词:

public static String word(int num, String words)
{
    for (int i = 0; i < words.length(); i++) { // every character in words
        if (words.substring(i, i+1).equals(" ")) { // if word is a space
            num = num - 1; // you've found the next word, so subtract 1 (number of words left is remaining)
        }
        if (num == 1) { // found all words
            // return this word
            int lastIndex = i+1;
            while (lastIndex < words.length()) { // until end of words string
                if (words.substring(lastIndex, lastIndex+1).equals(" ")) {
                    break;
                }
                lastIndex = lastIndex + 1; // not a space so keep moving along the word
            }
            /*
            // or you could use this to find the last index:
            int lastIndex = words.indexOf(" ", i + 1); // next space after i+1
            if (lastIndex == -1) { // couldn't find another space
                lastIndex = words.length(); // so just make it the last letter in words
            }*/
            if (words.substring(i, i+1).equals(" ")) { // not the first word
                return words.substring(i+1, lastIndex);
            } else {
                return words.substring(i, lastIndex);
            }
        }
    }
    return null; // didn't find word
}

对于第二个问题,只需 * backward * 遍历字符串,将每个字母添加到一个新字符串中,然后将原字符串中的每个字母添加到新字符串中,但顺序是从后向前,然后使用String.toUpperCase()将字符串转换为大写,如下所示:

public static String reverse(String str) {
    String reversedString = ""; // this will be the reversed string

    // for every character started at the END of the string
    for (int i = str.length() - 1; i > -1; i--) {
        // add it to the reverse string
        reversedString += str.substring(i, i+1);
    }
    return reversedString.toUpperCase(); // return it in upper case
}

相关问题