我正在将一个String传递给一个以分隔符作为逗号的方法。
"TMJ,Emma,Sarah"
我使用','将此字符串标记为要拆分的正则表达式。
然后,我迭代标记化数组的长度,将每个元素与所有可能值的HashMap进行比较。如果正在测试的值是HashMap中的一个键,那么我得到键的值并将其存储在另一个String中。我想将键的每个值附加到包含值的String。
它似乎只迭代一次,然后跳出循环并返回它在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,
答案 0 :(得分:1)
您的日志记录表明您传递的字符串为"Emma, TMJ, "
,这不是您的建议。
09-20 16:33:51.039: ... recipient string list passed in to app obj = Emma, TMJ,
我相信你的问题的解决方案是使用String.split(",",0)
,因为这会删除最后的空字符串。您可能还希望在查找地图中的字符串之前使用String.trim()
。
答案 1 :(得分:0)
如果没有看到recipients
包含的内容,您可以放心地假设
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 + ",";
}
仅执行一次,因为recipients
仅包含Emma
的密钥。 for
循环循环3次,但只匹配if
一次。
如果您的recipients
地图包含Emma
和TMJ
的密钥,那么您的问题就是split()
方法,请查看其他答案。
答案 2 :(得分:0)
如果输入字符串是"Emma, TMJ,"
,则split
将返回包含这两个字符串的数组:
"Emma"
" TMJ"
最后一个与"TMJ"
不匹配。尝试使用", *"
(或更好,"\\s*,\\s*"
)作为split
使用的正则表达式(这会将额外空格视为分隔符的一部分,而不是将它们包含在结果字符串中);或者在结果字符串上使用.trim()
方法(删除前导和尾随空格)。