2017-05-09 6 views
0

現在のメッセージにはスペースだけで区切られた整数があるので、これらのスペースを別々の整数に連結する方法が必要です。例:連結し連続した整数

message1 = "My no is 9543 21 00 10" 
desired output = "My no is010" 

message2 = "You can reach 2 me at 42315 468" 
desired output = "You can reach 2 me at 42315468" 

私の主な問題は、電話番号は、誰かがこれを解決するために異なるアプローチを持っている場合、私に知らせてくださいので、一緒にスペースで区切られた電話番号を連結するIE用上記の問題を解決することです。

私は、次のコードを試してみましたが、文字列がスペースで終了したときにそれは動作しません:

if(message.matches(".*\\d.*")){    
    for (int i = 0; i <= message.length() -2 ; ++i){    
     if ((Character.isDigit(message.charAt(i))) && message.charAt(i+1) == ' ' && (Character.isDigit(message.charAt(i+2)))) {       
      StringBuilder sb = new StringBuilder(message); 
      sb.deleteCharAt(i+1); 
      message = sb.toString(); 
     } 
    }      
} 
+5

つまり、数字で囲まれた空白を削除しようとしています。 'message = message.replaceAll("(?<= \\ d)\\ s +(?= \\ d) "、" ");' – Pshemo

+1

@Pshemoこれは答えとして投稿する必要があります。 –

+0

@TimB私は、問題の説明に基づいて、提供された例が単純すぎて答えの代わりにコメントを投稿したと考えています(誰かが必要なものをすべて提供していないため、情報)。私はOPがこの解決策がうまくいかないいくつかの実際の事例に対応することを望んでいました。そして、本当の答えを考え始めることができます。しかし、私が間違っていたと期待してください:) – Pshemo

答えて

1

peshmoさんのコメントに基づいて、コミュニティのwikiの答えに役立ちます願っています。

つまり、数字で囲まれたスペースを削除しようとしています。

message = message.replaceAll("(?<=\\d)\\s+(?=\\d)",""); 

この正規表現はこれを行います。ここで試してください:https://regex101.com/r/qR33XN/1

0

は、これは単なるメモ帳で書かれ、テストされていないコードですが、私はあなたの要点を取得すると思います。

基本的には、文字列をスペース( '')で区切って配列に分割し、すべてをつなぎ直します。 index + 1が数字でない場合はスペースを追加し、そうでない場合はスペースを追加しないでください。

私は、これは

String msg = "abc 1 2 3 333 yoo" 
String[] splitted = msg.Split(' '); 
String output = ""; 

for(int i = 0; i < splitted.Length - 1; i++) { 

    output += splitted[i]; 
    if(i + 1 < splitted.Length - 1) { 
     if(isInteger(splitted[i]) && isInteger(splitted[i+1])) 
      continue; 
    } 
    output += " " 
} 
output = output.Trim(); 

public static boolean isInteger(String s) { 
    try { 
     Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
     return false; 
    } catch(NullPointerException e) { 
     return false; 
    } 
    // only got here if we didn't return false 
    return true; 
} 
+0

この過度に冗長なコードが教育目的のためのものである場合、注意する必要があるいくつかのものがあります。 *を忘れないでください。 (OK、あなたはそれがテストされていないと言った) *通常のプログラムフローの例外に頼らない* *ループ内の文字列を連結しないでください。代わりにStringBuilderを使用してください。 – cyberbrain

+0

これは概念の証です。ポイントを得るためにちょうど – Murf

+0

これはうまくいくが、はるかに単純な方法がある。たとえば、私が今投稿したCW回答を見てください。 –

関連する問題