2017-05-07 14 views
0

返されるときの部分文字列が常に ""である理由を判断するのに問題があります。単語部分文字列メソッド

C 
h 
e 
m 
i 
s 
t 
r 
y 

空白行は、その後、「」のサブストリング値として出力されます。単一の単語が渡された場合(例化学)は、私は次のようなものを取得します。

public String NextString(String lstring){ 
    String substring=""; 
    int i=0; 
    while (lstring.charAt(i)!=' ') { 
     System.out.println(lstring.charAt(i)); 
     substring.concat(Character.toString(lstring.charAt(i))); 
     i++; 
    } 
    System.out.println(substring); 
    return substring; 
} 

助けてください!

+0

どういうところが間違っていますか?あなたのコードとして働いているようです。 –

+0

'substring = substring.concat(Character.toString(lstring.charAt(i))); ' – Tdorno

答えて

1

連結文字列を再割り当てすることはありません。代わりにこれを試してみてください:

substring = substring.concat(Character.toString(lstring.charAt(i))); 

リファレンス:Oracle Doc

+0

ありがとう@編集のために: –

0

Javaで文字列は不変であり、あなたはそれを割り当てるときに「デヴェンドラLattuは」あなたが必要と言ったように、あなたは再びそれにそのための を値を変更することはできませんあなたはその高速化するJava 8 link to itからStringJoinerを使用することができ、これと可変が気に入らない場合は、変数

substring=substring.concat(Character.toString(lstring.charAt(i))); 

に新しい文字を連結する連結の出力を毎回割り当てます私はあなたが連結を行っているときにサブがあるループの最後で結果としてサブに格納されていないため、あなたの部分文字列は、印刷されたばかりされていない理由を最初の答え:)

+0

このミスをおかけして申し訳ありません、私は答えを更新しました –

+0

StringJoinerはお勧めしません。それはもっと内的なものです。代わりにStringBuilderを使用してください。 – GhostCat

0

理由でごめんなさいまだ空白です。 以下の変更を試してください:

String substring=""; 
int i=0; 
while (lstring.charAt(i)!=' ') { 
    System.out.println(lstring.charAt(i)); 
    substring=substring.concat(Character.toString(lstring.charAt(i))); 
    i++; 
} 
System.out.println(substring); 
return substring; 
+0

説明なし...アップヴォートはありません。それはほとんどのコードにのみ答えています。 – GhostCat

0

文字列オブジェクトは変更できません。したがって、concat()は部分文字列を変更しませんが、変更された文字列を返します。したがって、あなたは必要です

substring = substring.concat(... 

それを超えて:あなたはその文字列の文字を反復したいと思います。あなたは絶対に複雑なwhileループを必要としません。代わりにfor-eachループスタイルを使用してください:

for (char singleChar : lstring.getCharArray()) { 
関連する問題