Discussion:
[問題] indexOf的問題
(时间太久无法回复)
好累想睡覺
2006-10-23 02:27:35 UTC
Permalink
※ 引述《oopsy (oopsy = oopsy)》之銘言:
: 我想請問
: 如果我想讀出一行字串中
: 其中三個位置
: eg. [abc (1,2,3)]
: 我想知道"[" "(" "," 這幾個的位置
: 以便我可以output "abc" 和 "1"
: 我的code有問題 以下
: if(line.indexOf("[") >0) {
: int head = line.indexOf("[");
: if(line.indexOf("{") >0){
: int tail1 = line.indexOf("{");
: line = line.substring(head+1,tail1-1);
: System.out.println(line);
: }
: }
: //以下的判斷式 執行後沒有結果
: if(line.indexOf("(") >0) {
: int son1 = line.indexOf("(");
: if(line.indexOf(",")>0){
: int son2 = line.indexOf(",");
: line1 = line.substring(son1+1,son2-1);
: System.out.println(line1);
: }
: }
: 麻煩板上各位告訴我原因,謝謝。
: 很頭大阿

簡單的原因在於 :

1. String 的索引值分配不熟

2. 對 String 的函式 indexOf(int ch) , substring(int beginIndex, int endIndex)

沒有詳細的了解 可以看看 String 的一些 API

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html

另外建議寫程式遇到不知道值是多少

可以用 System.out.print() 來 show 出一些變數的值來幫忙 Debug


詳細原因大概有如下 :

1. 假設宣告 String line = "[abc (1,2,3)]" ;

其索引位置是從0開始的

也就是說你程式的 line.indexOf("[") 本身找到的值會是 0

所以第一個判斷式 if(line.indexOf("[") >0) 根本就沒跑進去


2. 第二個判斷式 if(line.indexOf("{") >0) 裡面的符號根本就是錯的

後面的程式碼有 "{" 也要改成 "(" 這邊就不加敘述


3. 假設 line 本身在第一次切完就變成了 "abc"

但是裡面根本就找不到"("這個符號

所以第二次的判斷就沒有結果

我會把 line = line.substring(head+1,tail1-1) ;

變成多宣告一個 String 出來去接切完後的 "abc"


4. substring 的用法還是有邏輯上的錯誤

假設現在的 line 值是 "[abc (1,2,3)]"

那麼 son1 和 son2 值會等於 5 和 7

line.substring(son1+1,son2-1) 這行也就是說你寫了

line.substring(6,6) 按照 substring 這個方法的定義 切出來會是 null 的字串

應該改成 line.substring(son1+1,son2) ;

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.118.52
※ 編輯: aeifkz 來自: 163.25.118.52 (10/23 18:27)
Pao
2006-10-23 06:34:42 UTC
Permalink
以下是我的懶惰方法:

public class Test3
{
public static void main(String[] args)
{
String str = "[abc (1,2,3)]";
String[] array = str.split("\\W+");
for(String s : array)
System.out.println(s);
}
}

只是陣列第一個會是空字串,哈~

希望會有幫助... ^^

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.65.151

继续阅读narkive:
Loading...