2016-11-13 16 views
0

想這是我的示例字符串:正則表達式在分離指標分爲基於長度和鄰近字符的字符串

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

我想拆分此字符串,從而令牌長度將始終小於或等於5個字符並且分割索引處的相鄰字符也可以是字母數字或白色空格。那第二個標記「A S」預計只有三個字符

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

注:

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

所以這裏的令牌數組應該包含以下字符串標記。我不能分割第二個標記,比如「a sa」,或者「a sa」會不正確,因爲非字母數字字符「'」(單引號)將在第一種情況下在分割索引之前分割,並且將在分割索引之後第二種情況。

我想用Java來實現這一點。

我曾嘗試在迭代字符串和遞減的分離指標,如果我找到比字母或空格其它分離指標的鄰居字符。我覺得我目前的做法是讓代碼變得複雜,而使用正則表達式會簡化代碼。

+0

我曾嘗試迭代的字符串和遞減,如果我找到鄰居性格分裂指數除字母數字或空格之外的分割索引。我覺得我目前的做法是使代碼變得複雜,而使用正則表達式會簡化代碼。只要我能夠訪問我的筆記本電腦,我就會使用代碼段更新這個問題。 –

+0

請原諒我的投票。這可以幫助我改進這個問題,也可以幫助我改進未來的問題 –

回答

2

看到這個代碼是否分裂指數有助於

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

regex101 online test

鄰近字符是字母數字或空格

我假設你想匹配.,而不是隻有字母數字字符因爲你的最後一個團隊擁有它。

在java中它會是這樣(由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)); 
    } 
} 

結果:

Full match: Just 
Full match: a s 
Full match: a'mpl 
Full match: e 'St 
Full match: ring. 
相關問題