【问题标题】:problems with java toLowerCase function when using arrays and multiple 'words' in the stringjava toLowerCase 函数在字符串中使用数组和多个“单词”时出现问题
【发布时间】:2014-10-22 16:36:57
【问题描述】:

我对 java 非常陌生,例如,我几乎不能编写 20 行基本代码并让它们工作,新级别,我有 2 个问题可能相关,也可能不相关,因为它们来自非常相似的部分我亲自编写的代码。

import java.util.Scanner;

public class StringCW {


public static void main (String [] args) {

    String word = ""; 

    while(!(word.equals("stop"))){


        Scanner capconversion = new Scanner(System.in);
        System.out.println("Enter word:" );

        word = capconversion.next(); 
        String lower = word.toLowerCase();
        word = lower;
        System.out.println("conversion = " + word);

    }


    System.out.println("ending program");


        }
    }
}

这是我的第一段代码,它旨在获取任何字符串并将其转换为小写,但是如果我要打印由空格分隔的任何内容,例如:“WEWEFRDWSRGdfgdfg DFGDFGDFG”,只有第一个“单词”将是打印和转换后,我也从 cap 转换中得到内存泄漏,虽然我不明白这意味着什么或如何解决它

我的第二个问题可能也是这样

import java.util.Scanner;

public class splitstring {

private static Scanner capconversion;

public static void main (String [] args) {

    String word = ""; 

    while(!(word.equals("stop"))){

        capconversion = new Scanner(System.in);
        System.out.println("Enter word:" );

        word = capconversion.next(); 
        String lower = word.toLowerCase();
        String[] parts = lower.split(" ");
        parts [0] = "";
        parts [1] = "";
        parts [2] = "";
        parts [3] = "";
        parts [4] = "";


        System.out.println("conversion = " + lower
        parts [0] + parts [1] + parts [2] + parts [3] + parts [4]);

        }

        System.out.println("ending program");
    }
}

这是第二个代码块,旨在执行与前一个代码相同的工作,除了在新行上打印每个“单词”,然后返回输入部分直到输入停止命令

我得到的错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at splitstring.main(splitstring.java:21)

但是我不明白错误出现在哪里

【问题讨论】:

  • 什么是splitstring.java:21?请遵守 Java 命名约定,类应在 PascalCase 中。
  • 我复制粘贴了我收到的错误消息,我正在使用eclipse作为我的编码程序,正如我所说,我对java不太了解,所以我希望能得到你们的帮助
  • 它告诉你错误在第21行。第21行是什么?
  • 第 21 行是部分 [1] = "";
  • 不要每次循环都创建Scanner

标签: java arrays while-loop split java.util.scanner


【解决方案1】:

这是因为您使用的是 Scanner.next(),它返回单个标记 - 默认情况下使用空格作为标记分隔符。

如果您想一次捕获一整行,也许您应该改用nextLine()

至于您的ArrayIndexOutOfBoundsException - 原因基本相同。您在单个单词上调用 split,因此返回的数组只有一个元素(元素 0)。当您尝试设置元素 1 时,它超出了数组的范围,因此出现异常。

请注意,这里与toLowerCase() 没有任何关系。

【讨论】:

  • 太好了,它解决了第一段代码中的问题,但是在换出后我仍然在第二段收到错误消息:next() for nextLine()
  • @BenBowen:你看我的解释了吗?您假设 split 返回一个包含至少 5 个元素的数组。为什么要硬编码对parts[0]parts[1] 等的访问?提示:使用parts.length 找出数组有多少元素...
  • 我已经尝试过使用您的建议,但我真的找不到方法。我确实阅读了您的第一个解释,但是直到我阅读了第二个,这对我来说没有意义您发布的部分。感谢parts.length的建议,它更有意义但是我如何从用户输入中获取一个整数值来设置数组的长度?
  • @BenBowen:您正在使用split 创建数组 - 用户输入已经在确定数组的长度。
猜你喜欢
  • 2015-03-24
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2011-02-07
  • 1970-01-01
  • 2012-12-13
相关资源
最近更新 更多