Java - 从字节数组

时间:2018-02-21 21:29:25

标签: java

所以我目前正在尝试使用这种(非常低效的)方法从字节数组中删除换行符

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�

存储的密码似乎仍然保留换行符,如何检测字节数组中的换行符并将其删除?

2 个答案:

答案 0 :(得分:0)

你应该使用&amp;&amp; (和)运算符,而不是|| (或)运营商。

您的代码:

if (b!='\n'||b!='\r')

请改为尝试:

if (b!='\n'&&b!='\r')

运算符只需要其中一个条件来评估truetrue。即使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]", "");
}