所以我目前正在尝试使用这种(非常低效的)方法从字节数组中删除换行符
public void fixPasswords() {
ArrayList<Byte> active = new ArrayList<>();
ArrayList<Byte> stored = new ArrayList<>();
for (byte b : activePassword) {
if (b!='\n'||b!='\r') {
active.add(b);
}
}
activePassword = new byte[active.size()];
for (int i = 0; i < active.size(); i++) {
activePassword[i] = active.get(i);
}
for (byte b : storedPassword) {
if (b!='\n'||b!='\r') {
stored.add(b);
}
}
storedPassword = new byte[stored.size()];
for (int i = 0; i < stored.size(); i++) {
storedPassword[i] = stored.get(i);
}
activePasswordString = new String(activePassword);
storedPasswordString = new String(storedPassword);
System.out.println("Active: "+activePasswordString);
System.out.println("Stored: "+storedPasswordString);
}
但是,它并没有删除换行符
Active: fK��f3�Nc1L�2*j�JQ��b�@|�`
Stored: >K�U�0p
uvn��B�
存储的密码似乎仍然保留换行符,如何检测字节数组中的换行符并将其删除?
答案 0 :(得分:0)
你应该使用&amp;&amp; (和)运算符,而不是|| (或)运营商。
您的代码:
if (b!='\n'||b!='\r')
请改为尝试:
if (b!='\n'&&b!='\r')
或运算符只需要其中一个条件来评估true
为true
。即使b
等于'\n'
,b!='\r'
也是如此,反之亦然。因此或表达式将始终求值为true,并且您将添加字节数组中的每个字符。
答案 1 :(得分:0)
public void fixPasswords() {
byte[] activePassword = "fK��\u000Ef3�Nc1\fL�2*j�JQ��b�@|�`\r".getBytes();
byte[] storedPassword = ">K�U�0p\nuvn��B�".getBytes();
String activePasswordString = parsePassword(activePassword);
String storedPasswordString = parsePassword(storedPassword);
System.out.println("Active: "+activePasswordString);
System.out.println("Stored: "+storedPasswordString);
}
private String parsePassword(byte[] password){
return new String(password).replaceAll("[\\n\\r]", "");
}