在子串之前修剪字符串

时间:2014-02-16 02:56:59

标签: java

/**
 * Shortens input by only having one letter in the output. 
 *If user inputs blank      answer, default is size Small.
 */

if (!burgerSize.isEmpty()) {
    burgerSize = burgerSize.trim().toUpperCase();
    burgerSize = burgerSize.substring(0, 1);
}

当我在项目中执行此操作时,命令行说:

  

线程“main”中的异常java.lang.StringIndexOutOfBoundsException ...字符串索引超出范围:1

     

at java.lang.String.substring(String.java:1 ...)

     

在BurgerOrder.main(BurgerOrder.java:66)“

如果我切换线条,它就不会这样做......但我的老师告诉我在子串之前修剪字符串。

if (!burgerSize.isEmpty()) {
    burgerSize = burgerSize.substring(0, 1);
    burgerSize = burgerSize.trim().toUpperCase();

} 

这是我原来的,没有错误。我应该保持原样并接受我失去的分数吗?

更新:让我澄清一下。如果用户输入字母S,如此"ssss",它将缩短并大写为“S”。对于M "mmmmm"等同样的事情。我知道我在用我的代码做什么。我只是想知道我的教授建议的是错的(他正在阅读我打印出来的代码)。

3 个答案:

答案 0 :(得分:1)

String方法isEmpty()仅检查字符串是否包含任何字符,甚至不包含空格。例如,如果burgerSize = " "(注意引号之间的空格),那么对trim()的调用将删除该空格,并且您对substring(0, 1)的调用将失败,因为字符串为空,即使它你第一次检查它时不是空的。

尝试将trim()移到if语句之上,如下所示:

burgerSize = burgerSize.trim();
if (!burgerSize.isEmpty())
{
    burgerSize = burgerSize.substring(0, 1).toUpperCase();
}

答案 1 :(得分:0)

trim会删除空格等空格。当burgerSize以空格开头时,它在该点不是空的,因此它通过了not isEmpty测试。但是当你剪掉空间时,burgerSize变空了,所以尝试取第一个字母就失败了。首先尝试修剪,然后检查是否为空。

祝你好运!

答案 2 :(得分:0)

为了安全起见,您应该在执行子字符串之前修剪字符串。考虑:

/**
   <P>{@code java TrimBeforeSubstrXmpl}</P>
 **/
public class TrimBeforeSubstrXmpl  {
   public static final void main(String[] igno_red)  {
      test("sssssssss");
      test("   sssssssss");
   }
   private static final void test(String s_s)  {
      System.out.println("Testing \"" + s_s + "\"");

      s_s = s_s.substring(0, 1);

      System.out.println("   Substring: \"" + s_s + "\"");

      s_s = s_s.trim().toUpperCase();

      System.out.println("   Trimmed then uppercase: \"" + s_s + "\"");
   }
}

输出:

[C:\java_code\]java TrimBeforeSubstrXmpl
Testing "sssssssss"
   Substring: "s"
   Trimmed then uppercase: "S"
Testing "   sssssssss"
   Substring: " "
   Trimmed then uppercase: ""
相关问题