2009-04-24 22 views
0
、私は次のコードを使用してい

疑問がある場合/他-IFロジック

String sample = " : : "; 
String[] splitTime = sample.split(":"); 
if (splitTime[0].trim().equals("") || 
     splitTime[0].trim().equals(null)) { 
     System.out.println("Inside Split 0"); 
     splitTime[0] = "0"; 
} else if (splitTime[1].trim().equals("") || 
     splitTime[1].trim().equals(null)) { 
     System.out.println("Inside Split 1"); 
     splitTime[1] = "0"; 
}else if (splitTime[2].trim().equals("") || 
     splitTime[2].trim().equals(null)) { 
     System.out.println("Inside Split2"); 
     splitTime[2] = "0"; 
} 

System.out.println("Value 1 :"+splitTime[0]); 
System.out.println("Value 2 :"+splitTime[1]); 
System.out.println("Value 3 :"+splitTime[2]); 

OUTPUT:
内での分割0
値1:0
値2:
値3:
Iそれが2番目と3番目のif-elseステートメントに入らない理由は分かりません。誰でも助けてくれますか?

+0

は、foreachのループを使用してこの問題を解決するために試してみてください:ブロックがあれば、あなたが欲しいのセマンティクスを取得するには、ちょうどあなたの連鎖を検討/ * – Groo

+1

foreachは、文字列が不変であり、配列インデックスを使用して元の値を上書きする必要があるため、ここでは使用しません。 – Alnitak

答えて

3

最初のif文がtrueで実行された場合、else ifの残りの部分は実行されないためです。他のelse-if文を実行する場合は、別々のif文として書き直してください。

String sample = "::"; 
String[] splitTime = sample.split(":"); 
if (splitTime[0].trim().equals("") || 
     splitTime[0].trim().equals(null)) { 
     System.out.println("Inside Split 0"); 
     splitTime[0] = "0"; 
} 
if (splitTime[1].trim().equals("") || 
     splitTime[1].trim().equals(null)) { 
     System.out.println("Inside Split 1"); 
     splitTime[1] = "0"; 
} 
if (splitTime[2].trim().equals("") || 
     splitTime[2].trim().equals(null)) { 
     System.out.println("Inside Split2"); 
     splitTime[2] = "0"; 
} 

System.out.println("Value 1 :"+splitTime[0]); 
System.out.println("Value 2 :"+splitTime[1]); 
System.out.println("Value 3 :"+splitTime[2]); 
+0

配列のループ反復の標準は、代替として役立つでしょう。 –

+0

実際には、この例が意図したようなことを行う適切な方法です – Chii

2

"else if"のためです。

あなたが行うコードがある場合:

if (a) { 
} else if (b) { 
} 

を最初の分岐だった場合は、第二分岐が実行することはできません。

代わりに次のものが必要です。

if (a) { 
} 

if (b) { 
} 

条件を独立させるために。

BTW、String.trim()nullを返すことができません。出力には3つの要素、つまりString.split()が返されることはありません。潜在的により良いコードは次のようになります。これは、If-else節の基本的な操作によるものである

String sample = " : : "; 
String[] splitTime = sample.split(":"); 
for (int i = 0; i < splitTime.length; ++i) { 
    splitTime[i] = splitTime[i].trim(); 
    if (splitTime[i].length() == 0) { 
     splitTime[i] = "0"; 
    } 
} 
0

:本当です

if(foo) { 
    // A 
} else if(bar) { 
    // B 
} 

foo場合は、Aが実行されます、そしてbarをテストすることはありません。 foreachの(文字列項目:

if(foo){ 
    // A 
} 

if(bar) { 
    // B 
} 
0

String sample = " 12 : 59 : 60 "; 
// strip spaces and create up to 3 parts 
String[] splitTime = sample.trim().split(" *: *", 3); 
for (int i = 0; i < splitTime.length; i++) 
    System.out.println("Inside " + i + " '" + splitTime[i] + '\''); 

プリント

Inside 0 '12' 
Inside 1 '59' 
Inside 2 '60' 
関連する問題