3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
您的代碼中有很多錯(cuò)誤..
mychar == ":"
應(yīng)該是mychar.equals(":")
。由于字符串是不可變的,我們需要使用.equals
來(lái)比較它們而不是==
(<- 這將檢查引用是否相等而不是字符串值)。"cord1".charAt
應(yīng)該是你的變量cord1.charAt
.. 通過(guò)使用"cord1"
你基本上創(chuàng)建了一個(gè)新的 String 值cord1
。cord1.substring(a);
不改變cord1
值,但返回一個(gè)新的字符串。所以你必須保存這個(gè)字符串結(jié)果,或者打印它,然后用break
.使用
cord1 = cord1.substring(a)
會(huì)縮短字符串本身。由于您仍然在原始字符串[0, c1)
所在的范圍內(nèi)循環(huán)c1
,我們?nèi)匀粫?huì)得到一個(gè) StringIndexOutOfBoundsException。相反,你不需要?jiǎng)e的情況,并同時(shí)需要cord1 = cord1.substring(a)
和break
如果-包內(nèi)。(另外,我假設(shè)您也想刪除它:
本身,因此您必須.substring(a+1)
改用。)另外,為什么要使用
String.valueOf( char )
而不是只使用char
它們自己?不是真正的要求,但String.valueOf
這里有點(diǎn)多余,并且使代碼的可讀性降低。
把它們放在一起:
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);
}
}
這將導(dǎo)致最終cord1具有值" x=23 y=60 z= 600"(注意前導(dǎo)空格)。
這是一個(gè)更簡(jiǎn)單的替代方案,結(jié)果相同:
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貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
String.valueOf("cord1".charAt(0))
意味著您正在查看最高索引為 4 的字符串“cord1”的第 0 個(gè)字符,這就是為什么它在 5 處給出越界異常。
你必須做的是String.valueof(cord1.charAt(0))
。這將考慮變量中的字符串cord1
。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
使用等于而不是“==”像這樣
if (mychar.equals(":")){
break;
您需要使用 equals 方法,因?yàn)槟谑褂米址C慨?dāng)您使用字符串時(shí),您必須將它們與方法 equals 進(jìn)行比較。如果你使用
char myChar = .....
你的代碼會(huì)起作用。你可以用“==”比較字符
添加回答
舉報(bào)