0

区切り文字としてカンマを持つメソッドに文字列を渡しています。

"TMJ,Emma,Sarah"

分割する正規表現として「,」を使用して、この文字列をトークン化します。

次に、各要素をすべての可能な値の HashMap と比較して、トークン化された配列の長さを反復処理します。テストされている値が HashMap のキーである場合、キーの値を取得し、それを別の文字列に格納します。

キーの各値を、値を保持する文字列に追加したいと考えています。

一度だけ反復するように見え、その後ループから飛び出し、ハッシュマップで最初に見つけたものだけを返します。

誰でも理由を説明できますか?前もってありがとうマット。

public static String getrecipientIntergerValues(String recipient) {

        Log.e(TAG, "recipient string list passed in to app obj = " + recipient);


         String[] tokenizedRecipient = recipient.split(",");
         String recipientAsInteger = "";

         for(int i = 0; i < tokenizedRecipient.length; i++){
             Log.e(TAG, "tokenizedRecipient = " + tokenizedRecipient[i].toString());
         }

         Log.e(TAG, "tokenizedRecipient length = " + tokenizedRecipient.length);

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



             if(recipients.containsKey(tokenizedRecipient[i].toString())){
                 Log.e(TAG, "hashmap contains key " + tokenizedRecipient[i].toString() + "with value " + recipients.get(tokenizedRecipient[i].toString()));
                 String integerValueOfName = recipients.get(tokenizedRecipient[i].toString());
                 recipientAsInteger = recipientAsInteger + integerValueOfName + ",";

             }

         }

        Log.e(TAG, "recipient list as integers = " + recipientAsInteger);

        return recipientAsInteger;
    }

.

09-20 16:33:51.039: E/NfcScannerApplication(25835): recipient string list passed in to app obj = Emma, TMJ, 
09-20 16:33:51.039: E/NfcScannerApplication(25835): tokenizedRecipient = Emma
09-20 16:33:51.064: E/NfcScannerApplication(25835): tokenizedRecipient =  TMJ
09-20 16:33:51.064: E/NfcScannerApplication(25835): tokenizedRecipient =  
09-20 16:33:51.079: E/NfcScannerApplication(25835): tokenizedRecipient length = 3
09-20 16:33:51.079: E/NfcScannerApplication(25835): hashmap contains key Emmawith value 3
09-20 16:33:51.089: E/NfcScannerApplication(25835): recipient list as integers = 3,
4

3 に答える 3

1

あなたのロギングは、あなたが渡している文字列があなたが提案した"Emma, TMJ, "ものではないことを示唆しています。

09-20 16:33:51.039: ... recipient string list passed in to app obj = Emma, TMJ, 

String.split(",",0)最後に空の文字列が削除されるため、問題の解決策は使用することだと思います。String.trim()マップで文字列を検索する前に使用することもできます。

于 2013-09-20T15:47:55.457 に答える
0

入力文字列が の場合、 は"Emma, TMJ,"splitの 2 つの文字列を含む配列を返します。

"Emma"
" TMJ"

最後のものは一致しません"TMJ"。使用する正規表現として", *"(または、より良い)を使用してみてください(これにより、余分なスペースが区切り文字の一部として扱われ、結果の文字列には含まれません)。または、結果の文字列に対してメソッドを使用します (先頭と末尾の空白を削除します)。"\\s*,\\s*"split.trim()

于 2013-09-20T15:52:36.457 に答える