如何使用String.startsWith(..)忽略前导空格?

时间:2013-09-14 00:14:04

标签: java regex string

假设我从needle开始,忽略了前导空格:

String haystack = "needle#####^&%#$^%...";
String haystackWithSpace = "    needle******!@@#!@@%@%!$...";

我想捕获以needle^\s*needle.*开头的任何内容(如果允许使用正则表达式)。有没有一种优雅的方法可以在不调用trim()的情况下执行此操作?或者有没有办法让正则表达式在这里工作?我希望以下内容成立:

haystackWithSpace.startsWith("needle"); // doesn't ignore leading whitespace
haystackWithSpace.startsWith("^\\s*needle"); // doesn't work

基本上,是否有符合以下条件的字符串s?:

haystack.startsWith(s) == haystackWithSpace.startsWith(s);

3 个答案:

答案 0 :(得分:3)

修剪前导和尾随空格的最简单方法

string=string.trim();

答案 1 :(得分:3)

尝试s.matches("^\\s*" + Pattern.quote("string I'm matching"))

或预编译模式:

Pattern p = Pattern.compile("^\\s*" + Pattern.quote("string I'm matching"));
if (p.matcher(s).matches()) { ... }

答案 2 :(得分:0)

如果您使用^\s+替换正则表达式"",则会从字符串的开头删除所有空格。

haystack = haystack.replaceAll("^\\s+", "");