为了账号安全,请及时绑定邮箱和手机立即绑定

制作一个循环,在遇到冒号字符之前返回字符

制作一个循环,在遇到冒号字符之前返回字符

翻翻过去那场雪 2021-09-03 10:31:57
每当我运行我的代码时,它都会返回此错误消息:Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5    at java.lang.String.charAt(Unknown Source)    at codes.Main.main(Main.java:10)这是我的代码:    package codes;public class Main {    public static void main(String[] args) {        String cord1 = "Name: x=23 y=60 z= 600";        String cord2 = "Name: x=200 y=20 z= 300";        int c1 = cord1.length();        String mychar = String.valueOf("cord1".charAt(0));        for (int a = 0; a < c1; a++){            mychar = String.valueOf("cord1".charAt(a));            if (mychar == ":"){                break;            }else{                cord1.substring(a);            }        }    }}
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您的代码中有很多错误..

  1. mychar == ":"应该是mychar.equals(":")。由于字符串是不可变的,我们需要使用.equals来比较它们而不是==(<- 这将检查引用是否相等而不是字符串值)。

  2. "cord1".charAt应该是你的变量cord1.charAt.. 通过使用"cord1"你基本上创建了一个新的 String 值cord1

  3. cord1.substring(a);不改变cord1值,但返回一个新的字符串。所以你必须保存这个字符串结果,或者打印它,然后用break.

  4. 使用cord1 = cord1.substring(a)会缩短字符串本身。由于您仍然在原始字符串[0, c1)所在的范围内循环c1,我们仍然会得到一个 StringIndexOutOfBoundsException。相反,你不需要别的情况,并同时需要cord1 = cord1.substring(a)break如果-包内。(另外,我假设您也想删除它:本身,因此您必须.substring(a+1)改用。)

  5. 另外,为什么要使用String.valueOf( char )而不是只使用char它们自己?不是真正的要求,但String.valueOf这里有点多余,并且使代码的可读性降低。

把它们放在一起:

public class Main {

    public static void main(String[] args) {

        String cord1 = "Name: x=23 y=60 z= 600";

        System.out.println("cord1 before:\t" + cord1);

        int c1 = cord1.length();

        char mychar = cord1.charAt(0);

        for (int a = 0; a < c1; a++){

            mychar = cord1.charAt(a);

            if (mychar == ':'){

                cord1 = cord1.substring(a+1);

                break;

            }

        }

        System.out.println("cord1 after:\t" + cord1);

    }

}

这将导致最终cord1具有值" x=23 y=60 z= 600"(注意前导空格)。

这是一个更简单的替代方案,结果相同:


String cord1 = "Name: x=23 y=60 z= 600";

String cord1ExcludingName = cord1.replaceFirst("^.*:","");


^       : Only look at the start of the String for:

 .*     : Zero or more of any character,

   :    : followed by a `:`

它将被替换为""(空字符串),因此它们基本上被删除了。


查看完整回答
反对 回复 2021-09-03
?
慕少森

TA贡献2019条经验 获得超9个赞

String.valueOf("cord1".charAt(0)) 意味着您正在查看最高索引为 4 的字符串“cord1”的第 0 个字符,这就是为什么它在 5 处给出越界异常。

你必须做的是String.valueof(cord1.charAt(0))。这将考虑变量中的字符串cord1


查看完整回答
反对 回复 2021-09-03
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

使用等于而不是“==”像这样


 if (mychar.equals(":")){

            break;

您需要使用 equals 方法,因为您正在使用字符串。每当您使用字符串时,您必须将它们与方法 equals 进行比较。如果你使用


char myChar = .....


你的代码会起作用。你可以用“==”比较字符


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信