2014-02-28 92 views
1

在所有其他相关文章中,人们询问了如何删除String java中的前导空格或尾随空格。现在,我的问题是如何获得前导或尾随空格?我能想到的是例如使用这样的功能,以获得尾随空格:如何获取字符串中的前导空格和尾随空格java

private String getTrailingSpaces(String str) { 
    return str.replace(str.replaceFirst("\\s+$", ""), ""); 
} 

但我不知道这是正确的,甚至如果是,有没有更好的方式来做到这一点?

回答

1

试试这个

String leading = str.replaceAll("^(\\s+).+", "$1"); 
    String tailing = str.replaceAll(".+?(\\s+)$", "$1"); 
+0

我不明白第二个参数是什么意思! – user3150474

+0

第二个参数表示组#1的内容。第一组是(\\ s ++)。所有的事情意味着用组#1中的内容替换所有输入 –

+0

如果你的字符串只包含空格怎么办? – kdgregory

0

尝试是这样的:

private String getTrailingSpaces(String str) { 
    Pattern p = Pattern.compile(".*(\\s+)$"); 
    Matcher m = p.matcher(str); 
    String trailing = ""; 
    if (m.matches) { 
    trailing = m.group(1); 
    } 
    return trailing; 
} 
1

我不是专家,但我认为你应该执行2个不同的正则表达式,一个领先的空间,一个用于尾随空格。

private static final Pattern LEADING = Pattern.compile("^\\s+"); 
private static final Pattern TRAILING = Pattern.compile("\\s+$"); 

public String getLeadingSpaces(String str) { 
    Matcher m = LEADING.matcher(str); 
    if(m.find()){ 
     return m.group(0); 
    } 
    return ""; 
} 

public String getTrailingSpaces(String str) { 
    Matcher m = TRAILING.matcher(str); 
    if(m.find()){ 
     return m.group(0); 
    } 
    return ""; 
} 
+0

您可以将这些组合成单个模式,并从匹配器中获取单个组。 – kdgregory

+0

我试过了,但我无法找到正确的“加入”正则表达式 –

0

试试这个,你需要ArrayUtils from Apache Commons

String str1 = " abc "; 
char[] cs = str1.toCharArray(); 
Character[] characters = ArrayUtils.toObject(cs); 
// System.out.println(characters.length); // 6 
for (Character character : characters) { 
    if (character.isSpace(character.charValue())) { 
    // PROCESS ACCORDINGLY 
    } else { 
    // PROCESS ACCORDINGLY 
    } 
} 
相关问题