2016-11-13 5 views
0

これは私のサンプル文字列であると仮定します。正規表現は、分割されたインデックスに長さと、隣接する文字に基づいて文字列を分割する

String s = "Just a sa'mple 'String."; 

私はトークンの長さが常に未満または5つの文字に等しくなりますようにこの文字列を分割したいですまた、分割インデックスの隣接する文字は、英数字または空白のいずれかです。

String tokens[] = s.split(<regex>); 

そこでここでは、トークン配列は、文字列トークン以下含まれている必要があります

"Just ","a s","a'mpl","e 'St","ring." 

注秒のトークン「S」は3文字のみを持つことが期待されていること。 "a sa"や "a sa"のような2番目のトークンを分割することはできません。最初のケースで分割インデックスの前に非英数字 "'"(一重引用符)の前になり、 2番目のケース。

私はJavaを使用してこれを達成しようとしています。

英数字または空白以外の分割インデックスの隣接文字を検出した場合、文字列を反復処理して分割インデックスをデクリメントしようとしました。私の現在のアプローチは、コードを複雑にして、代わりに正規表現を使用するとコードを単純化すると感じています。

+0

英数字または空白以外の分割インデックスの私の現在のアプローチは、コードをコンパイルし、代わりに正規表現を使用するとコードを単純化すると感じています。ノートパソコンにアクセスするとすぐにコードスニペットで質問を更新します。 –

+0

落札理由をご記入ください。それは私がこの質問と今後の質問を改善する助けになるかもしれません。 –

答えて

2

このコードは、分割されたインデックスに

(?<=[\w\d\s.]|^)[\w\d\s.].{0,3}[\w\d\s.](?=[\w\d\s.]|$)

regex101 online test

近隣の文字を支援するかどうかを参照してください

英数字または白スペースです私はあなたが合うようにしたいと仮定しています.の代わりに、英数字のcharacあなたの最後のグループがそれを持っているので、エッジで傷つきます。

それはこの (regex101によって提供されたコード)

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

final String regex = "(?<=[\\w\\d\\s.]|^)[\\w\\d\\s.].{0,3}[\\w\\d\\s.](?=[\\w\\d\\s.]|$)"; 
final String string = "Just a sa'mple 'String."; 

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 
final Matcher matcher = pattern.matcher(string); 

while (matcher.find()) { 
    System.out.println("Full match: " + matcher.group(0)); 
    for (int i = 1; i <= matcher.groupCount(); i++) { 
     System.out.println("Group " + i + ": " + matcher.group(i)); 
    } 
} 

結果のようになり、Javaで

:私は隣の文字を見つけた場合、私は文字列に反復し、分割されたインデックスをデクリメントしようとしている

Full match: Just 
Full match: a s 
Full match: a'mpl 
Full match: e 'St 
Full match: ring. 
関連する問題