好累想睡覺
2006-10-23 02:27:35 UTC
※ 引述《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)
: 我想請問
: 如果我想讀出一行字串中
: 其中三個位置
: 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)