【问题标题】:Why is the program throwing this error??: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 36为什么程序会抛出此错误??:线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:36
【发布时间】:2017-01-10 07:11:32
【问题描述】:

在本作业中,您将编写一个推文测试员。 Twitter 允许用户发送不超过 140 个字符的消息。用户使用@mentions 将推文定向到特定用户,并使用#hashtags 标记推文。用户还可以“转发”其他用户的推文。 在本实验中,您将要求用户输入一条潜在的推文。首先,您将通过检查长度是否小于或等于 140 个字符来检查它是否是有效的推文。 如果推文太长,则打印超过 140 个字符。 如果推文有效打印长度正确,则计算@mentions和#hashtags的数量并使用以下规则确定推文是否为转发: 每个提及都以“@”字符开头,并且后面至少有一个非空格或非制表符。 所有主题标签都以“#”字符开头,并且后面至少有一个非空格或非制表符。 如果该推文在推文文本的任何位置包含字符串“RT:”,则该推文是转推。 Twitter 忽略大小写,因此“RT:”、“rt:”和任何其他可能的大写字母都被视为同一组字符,并且都表示转发。您无需检查“RT:”字符串后面的任何字符。 请记住,转义序列 '\t' 可用于检查制表符。 样品运行 1: 请输入推文: RT:这是#long 推文。一个超长的#link。因此,当@you 编写代码时,它应该忽略所有#hashtags 和@mentions,因为它太长了。它还应该忽略转推字符串。 多余字符:50 样品运行 2: 请输入推文: 这个#tweet 是#short 并且有几个#hashtags。 RT:而且是转推。 长度正确 提及次数:0 标签数量:3 输入是转推。 样品运行 2: 请输入推文: 这个@tweet 是#short 并且有#hashtags 和@mentions # 长度正确 提及次数:2 标签数量:2 输入不是转推。

import java.util.Scanner;
import java.lang.Math;

public class Main{
    public static void main(String[] args)
     {
      Scanner scan = new Scanner (System.in);
      int h = 0;
      int m = 0;
      int count = 0; 
      char letter;
      boolean r = false;
      String tweet;
      System.out.println("Please enter a tweet:");
      tweet = scan.nextLine();
      int length = tweet.length();

      if (length <= 140)
      {
          while (count <= length)
          {
            letter = tweet.charAt(count);

            if (letter == '#' &&
                tweet.charAt(letter+1) != ' ')
            {
                h++;
            }

            if (letter == '@' &&
                tweet.charAt(letter+1) != ' ')
            {
                m++;
            }

            if ((letter == 'r' || letter == 'R') &&
            (tweet.charAt(letter + 1) == 't' || tweet.charAt(letter + 1) == 'T'))
            {
                r = true;
            }

            count ++;

          }

          System.out.println("Length Correct");
          System.out.println("Number of Mentions: " + (m));
          System.out.println("Number of Hashtags: " + (h));
          if (r == true)
          {
            System.out.println("The input was a retweet.");
          }
          else if (r==false)
          {
            System.out.println("The input was not a retweet.");
          }
      }

       if (length > 140)
       {
        System.out.println("Excess Characters: " + (length - 140));
       }


     }
}

【问题讨论】:

  • 首先,您将使用while (count &lt;= length) 超出您的数组,因此更改为&lt; 其次是letter + 1?也许count + 1 但最后你会再次超过你的数组
  • 这是很多文本的方式,您的代码示例很难看到实际问题。请减少输入,以便更容易为您提供帮助。
  • 您是否查看过757 other questions 关于此异常的信息?

标签: java


【解决方案1】:

以下是问题的原因。

while (count <= length) {

以下是修复方法

while (count < length) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多