2013-10-21 62 views
0

我想替换下面的字符串空字符串(""),如果它等于“NULL”,“null”, “Null”, “nuLl”, “(null)”, “[null]”, {null}等我发现很难满足所有的场景与下面的正则表达式Java的正则表达式来删除空字符串

^NULL$ 

因此,如果输入的是“a null b”输出将是“a null b”

但是,如果输入的是“null”输出将是“”

+0

以及'a null b'的期望输出是什么?我期望'ab'。 – m0skit0

+1

使用[CASE_INSENSITIVE](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#CASE_INSENSITIVE),并取出^ $ – InnovWelt

+0

“null null”输出有为“空b” – user1793943

回答

2

你可以使用这种模式:(?i)[(\\[{]?null[)\\]}]?。 请参见下面的例子:(我)

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.apache.commons.lang3.StringUtils; 

public class EnumProgram { 

    public static void main(String... args) { 
     test("a NULL b", "a b"); 
     test("a null b", "a b"); 
     test("a Null b", "a b"); 
     test("a NuLl b", "a b"); 
     test("a (null) b", "a b"); 
     test("a [null] b", "a b"); 
     test("a {null} b", "a b"); 
    } 

    private static void test(String value, String expected) { 
     String newValue = Util.removeNullString(value); 
     System.out.println(value + " : " + newValue.equals(expected)); 
    } 
} 

class Util { 
    private static Pattern pattern = Pattern.compile("(?i)[(\\[{]?null[)\\]}]?"); 

    public static String removeNullString(String value) { 
     if (StringUtils.isEmpty(value)) { 
      return StringUtils.EMPTY; 
     } 

     Matcher matcher = pattern.matcher(value); 
     return matcher.replaceAll(StringUtils.EMPTY); 
    } 
} 
+0

在正则表达式中试用(?i),正如我在下面的答案 – AJJ

+0

正则表达式与我期望的非常接近...谢谢 – user1793943

+0

所以匹配{null]之类的东西实际上可以吗?这实际上也匹配(空 – micantox

0

你说明什么ribe被称为“不区分大小写”的正则表达式。由于我不是Java专家,我发现这个SO answer具有以下行,编辑,以满足您的需求:

System.out.print(sample.replaceAll("(?i)\\b(?:null)\\b","")); 
+0

'(null)','[null]'和'{null}'怎么办? – Dukeling

+0

谢谢,..但这不会匹配(空) – user1793943

+0

我没有在原来的帖子中看到这个要求。抱歉。 – mavrosxristoforos

0

试试这个:

str.replaceAll("(?i)\\(null\\)|\\[null\\]|\\{null\\}|null", ""); 
+2

Eww。曾听说[不区分大小写](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#CASE_INSENSITIVE)匹配?这也会匹配'[null]',尽管我不相信它应该。 – Dukeling

+3

一只小猫在你每次使用这个正则表达式时被杀死 – m0skit0

+1

这个正则表达式不起作用 – user1793943

-1

试试这个,

private static String removeNull(String input) 
    { 
     String[] splittedValue = input.split(" "); 
     StringBuilder stringBuilder = new StringBuilder(); 
     for (String value : splittedValue) 
     { 
      if (!value.equalsIgnoreCase("null")) 
      { 
       stringBuilder.append(value); 
       stringBuilder.append(" "); 
      } 
     } 
     return stringBuilder.toString(); 
    } 
+0

起初看这不行。 blabla {null} bla'呢? – m0skit0

+0

'(null)','[null]'和{{null}'怎么办? – Dukeling

0

用于验证的情况下在正则表达式不区分大小写。例如,请参阅下面的代码。下面的代码将输出“a b”

String str = "a NULl b"; 
String regx = "(?i)null"; 
String str2 = str.replaceAll(regx, ""); 
System.out.println(str2); 

output : a b