擦除包含null的字符串

时间:2014-06-02 08:00:08

标签: java regex string null replaceall

我的消息或println中有一个空值我要删除,当我只使用这样的代码时,所有这些都成功。

之前的消息:

message = 2014-06-02 14:53:37.103 null tes

以下是删除空字的代码。

public static void main(String[] args) {
    //final int month = Integer.parseInt(period[0]),  year = Integer.parseInt(period[1]);
    Date x = new Date();
    Timestamp t = new Timestamp(x.getTime());
    String a = "null";
    String b = t+" " +a + " tes";

    String tes = (b.trim()!= null && b.trim().length()>=23) ? b.trim().replaceFirst(b.trim().substring(0,28), ""+t) : b;

    System.out.println("message = " + tes);

}

打印输出是对的。它是这样的:

message = 2014-06-02 14:53:37.103 tes

但是当我插入此|时,打印出错了。我正在使用它作为分隔符。 这是出错的代码。

public static void main(String[] args) {
    //final int month = Integer.parseInt(period[0]),  year = Integer.parseInt(period[1]);
    Date x = new Date();
    Timestamp t = new Timestamp(x.getTime());
    String a = "null";
    String b = t+"| " +a + " tes";

    String tes = (b.trim()!= null && b.trim().length()>=23) ? b.trim().replaceFirst(b.trim().substring(0,28), ""+t) : b;

    System.out.println("message = " + tes);

}

这是打印输出:

message = 2014-06-02 14:58:03.148| null tes

实际上第二个代码会发生什么? 感谢

3 个答案:

答案 0 :(得分:2)

正如鲍里斯所说,还有其他方法,但主要问题是replaceFirst采用正则表达式,而管道是正则表达式中的特殊字符。

下面介绍Pattern.quote代码应该有效:

b.trim().replaceFirst(Pattern.quote(b.trim().substring(0,28)), ""+t)

答案 1 :(得分:1)

如果你想简单地删除“空”'文本字符串没有上面的regEx问题,而且快速而干净,只需替换' null'字符串直接。

b.replace("null", "") 

答案 2 :(得分:0)

该计划的主要目的是什么?如果只是为了删除String中的null,我会按照JamasA的说法去做。否则,如果你想获得时间戳和" tes"字符串在两个干净的字符串中我会这样做:

String tes = b.replace("null", "");
String[] aux = tes.split("\\|");
for (int i = 0; i < aux.length; i++) {
    System.out.println(aux[i].trim());
}

通过这种方式,您可以将两种信息分开。我希望它对您有所帮助:)