2017-03-28 12 views
0

私は楽しいための簡単なエクササイズをしています。ストリング「a0Ba」上数字の後にJava文字列ループが停止する

1. At least one upper case character. 
2. No digits. 

をしかし、のようなIループが続く場合:私は、文字列を取り、持っている最長の部分文字列を取得

for (int i = 0; i < s.length(); i++) { 

     if (Character.isLetter(s.charAt(i))) { 
      substring += s.charAt(i); 
     } 
     else { 
      arr.add(substring); 
      substring = ""; 
     } 
} 

ゼロで停止し、続行しないように思われます。たとえ有効な部分文字列 "Ba"が直後に来ても。

私はこの部分文字列で実行されます:「AsdF0ASDFGffdfr09asd0sd0sd0e」

それは結構な働きをし、正しいストリングを返します:「ASDFGffdfr」

なぜこれがあるの?私はとても混乱しています

+1

あなたは[MCVE]の形でこれを置くことができます:

問題を解決するために、ループ後の非空であるとarrに追加するsubstringのためのテストを追加しますか?どのように出力を取得していますか? 'arr'とは何ですか?など – pvg

+0

@ LukasWiklund OPの質問は、その入力のためにうまく動作すると言います。問題のある入力は '' a0Ba "' – dasblinkenlight

+1

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/です - 具体的には、あなたのプログラムはあなたができるほど短いです手作業で(つまり、鉛筆と紙で)あなたの失敗した入力で何をするかを突き止め、何が間違っているかを見てください。おそらく "ラバーダッキング"も助けになるでしょう。 – slim

答えて

1

数字が表示されているときにのみリストに候補を追加するため、正しい部分文字列が入力の最後にあると問題が発生します。

// The loop portion of your code remains unchanged: 
for (int i = 0; i < s.length(); i++) { 
    if (Character.isLetter(s.charAt(i))) { 
     substring += s.charAt(i); 
    } else { 
     arr.add(substring); 
     substring = ""; 
    } 
} 
// Add this code to fix the problem: 
if (!substring.isEmpty()) { 
    arr.add(substring); 
} 
関連する問題