2017-05-25 40 views
0

當用java guava拆分器拆分時可以不打破單詞嗎?爪哇番石榴拆分器不打破這個詞

我有這樣的例子:

var String msg = "My name is Fabio and I have a dog"; 

Splitter.fixedLength(5).split(msg).forEach(item -> { 
      System.out.println(item); 
     }); 

會打印:

My na 

me is 

Fabi 

o and 

I ha 

ve a 

dog 

但我想,他不食言

就像這樣:

My naME 

is Fabio 

and I have 

a dog 

布我沒有控制文本,我只想保留最後一個字的分數

回答

0

方法調用fixedLength(5)將分隔文本每5個字符,這就是爲什麼你的話被分成兩塊,所以你不能使用這個方法爲您的問題。你可以做的一件事是使用一個正則表達式作爲分隔符來分隔每個空白字符串,並使用一個循環來格式化輸出。

ArrayList<String> items = Splitter.onPattern("\\s+").splitToList(msg) 
for (int i = 0; i < items.size(); i++) { 
    System.out.print(items.get(i) + " "); 
    if ((i+1) % 2 == 0) { 
      System.out.println(); 
    } 
} 

這種邏輯應該回答你的問題。

0

您可以分割的話,當你重複他們建立了行:

final List<String> lines = new ArrayList<>(); 
final StringBuilder builder = new StringBuilder(); 
for (String word : Splitter.on(' ').split(msg)) { 
    if (builder.length() == 0) { 
     builder.append(word); 
    } else if (builder.length() <= 5) { 
     builder.append(' ').append(word); 
    } else { 
     lines.add(builder.toString()); 
     builder.setLength(0); 
     builder.append(word); 
    } 
} 
if (builder.length() > 0) { 
    lines.add(builder.toString()); 
} 
lines.forEach(System.out::println); 

輸出:

My name 
is Fabio 
and I have 
a dog