3 回答
TA贡献1821条经验 获得超4个赞
您的代码中有很多错误..
mychar == ":"
应该是mychar.equals(":")
。由于字符串是不可变的,我们需要使用.equals
来比较它们而不是==
(<- 这将检查引用是否相等而不是字符串值)。"cord1".charAt
应该是你的变量cord1.charAt
.. 通过使用"cord1"
你基本上创建了一个新的 String 值cord1
。cord1.substring(a);
不改变cord1
值,但返回一个新的字符串。所以你必须保存这个字符串结果,或者打印它,然后用break
.使用
cord1 = cord1.substring(a)
会缩短字符串本身。由于您仍然在原始字符串[0, c1)
所在的范围内循环c1
,我们仍然会得到一个 StringIndexOutOfBoundsException。相反,你不需要别的情况,并同时需要cord1 = cord1.substring(a)
和break
如果-包内。(另外,我假设您也想删除它:
本身,因此您必须.substring(a+1)
改用。)另外,为什么要使用
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 `:`
它将被替换为""(空字符串),因此它们基本上被删除了。
TA贡献2019条经验 获得超9个赞
String.valueOf("cord1".charAt(0))
意味着您正在查看最高索引为 4 的字符串“cord1”的第 0 个字符,这就是为什么它在 5 处给出越界异常。
你必须做的是String.valueof(cord1.charAt(0))
。这将考虑变量中的字符串cord1
。
TA贡献1836条经验 获得超13个赞
使用等于而不是“==”像这样
if (mychar.equals(":")){
break;
您需要使用 equals 方法,因为您正在使用字符串。每当您使用字符串时,您必须将它们与方法 equals 进行比较。如果你使用
char myChar = .....
你的代码会起作用。你可以用“==”比较字符
添加回答
举报