LoginSignup
0
0

More than 1 year has passed since last update.

Javaで、前後の連続する改行やタブを取り除く

Last updated at Posted at 2020-10-23

2022/07/14 追記
いや、というかやりたいことが
ApacheのStringUtils.strip()だったことに気づきました…よかったよかった…
https://github.com/apache/commons-lang/blob/master/src/main/java/org/apache/commons/lang3/StringUtils.java

追記
1文字だとマッチしないことに気づき
"^[\t\n]*([^\t\n]+(.|\\s)*[^\t\n]+)[\t\n]*$"から
"^[\t\n]*([^\t\n]*(.|\\s)*[^\t\n]+)[\t\n]*$"に修正した。
最初のプラスがアスタリスクになった。


大嫌いな正規表現。
前後以外の改行やタブはそのままにするとこがポイント。
めちゃくちゃハマったので記事にしときます。


    public static String trimNewline(String str) {
        String regex = "^[\t\n]*([^\t\n]*(.|\\s)*[^\t\n]+)[\t\n]*$";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        if (m.find()) {
            return m.group(1);
        } else { // 「空文字」や「タブや改行だけで構成された文字列」はマッチせずここにくる
            return "";
        }
    }

Javaの正規表現を調べると
「.」は任意の文字にマッチ
とだけ書いてあるものばかりですが、実は、
改行以外の任意の文字列
だったので、めちゃくちゃハマりました。

System.out.println(trimNewline("\t\n\t\nhoge\t\n\t\n")); // hoge
System.out.println(trimNewline("\t\n\t\nhoge")); // hoge
System.out.println(trimNewline("hoge\t\n\t\n")); // hoge

また、途中に改行やタブが入った、
"\t\n\n\n\t\tho\t\t\nhoge\nge\t\n\t\n"
こちらも、
image.png

無事に、前後のみ取り除かれました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0