我有以下代码:
List<String> decryptedPasswordInPairs = new ArrayList<String>();
String A5 = "A5";
for (String oddPair : oddPairsInEncryptedPassword) {
List<Byte> sample = new ArrayList<>();
for (int i = 0; i < oddPair.length(); i++) {
byte x = (byte) (oddPair.charAt(i) ^ A5.charAt(i % A5.length()));
sample.add(x);
}
String result = sample.toString();
decryptedPasswordInPairs.add(result);
}
在此代码中,当我调试程序以检查result
的值时,[0,7]
显示为07
而不是result
。
有没有办法将List
Byte
String
转换为 <activity
android:name=".HistoryActivity"
android:label="History"
android:theme="@style/AppTheme.Primary"></activity>
而没有任何问题?
答案 0 :(得分:2)
在这个解决方案中,我收集StringBuilder中的字符并在最后转换为String:
List<String> decryptedPasswordInPairs = new ArrayList<String>();
String A5 = "A5";
List<String> oddPairsInEncryptedPassword = new LinkedList<String>();
oddPairsInEncryptedPassword.add("A2");
for (String oddPair : oddPairsInEncryptedPassword) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < oddPair.length(); i++) {
byte x = (byte) (oddPair.charAt(i) ^ A5.charAt(i % A5.length()));
sb.append(""+x);
}
String result = sb.toString();
System.out.println(result);
decryptedPasswordInPairs.add(result);
}
答案 1 :(得分:2)
如果您愿意使用第三方库,则以下解决方案可以使用Eclipse Collections:
MutableList<String> decryptedPasswordInPairs = Lists.mutable.with("A2")
.collectWith((oddPair, A5) ->
CharAdapter.adapt(oddPair)
.injectIntoWithIndex(
ByteLists.mutable.empty(),
(bytes, character, index) ->
bytes.with((byte) (character ^ A5.charAt(index % A5.length()))))
.makeString(""), "A5");
decryptedPasswordInPairs.each(System.out::println);
我使用了以下导入:
import org.eclipse.collections.api.list.MutableList;
import org.eclipse.collections.impl.factory.Lists;
import org.eclipse.collections.impl.factory.primitive.ByteLists;
import org.eclipse.collections.impl.string.immutable.CharAdapter;
通过使用Eclipse Collections中提供的原始ByteList
,我能够避免装箱。 makeString
上提供的方法ByteList
允许您控制分隔符。传入空String
会删除toString
上List
使用的逗号。课程CharAdapter
围绕char
提供了一组基于String
的协议,其中包括我在此处使用的名为injectIntoWithIndex
的方法。
代码也可以分成更小的步骤,使其密度稍低,并且可能更容易阅读。
MutableList<String> decryptedPasswordInPairs = Lists.mutable.with("A2")
.collect(CharAdapter::adapt)
.collectWith((oddPair, A5) ->
oddPair.injectIntoWithIndex(
ByteLists.mutable.empty(),
(bytes, character, index) ->
bytes.with((byte) (character ^ A5.charAt(index % A5.length())))), "A5")
.collectWith(ByteList::makeString, "");
decryptedPasswordInPairs.each(System.out::println);
注意:我是Eclipse Collections的提交者。
答案 2 :(得分:0)
result
显示为[0,7]
而不是07
这是因为您将列表打印为String
。
你可以摆脱那样做:
for (Byte b : sample) {
System.out.print(b);
}
或许,但不是很优雅:
String result = sample.toString().replace(",", "").replace("[", "").replace("]", "");
decryptedPasswordInPairs.add(result);
答案 3 :(得分:-1)