指定入力文字数より改行する

仕様

指定入力文字数より改行する、サロゲートペア文字、全角文字、一文字単位で切る。

対策

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public static void main(String[] args) {
// TODO Auto-generated method stub
String inputText = "𠮷アあ1a1 ";
String resultText = "";
// 指定コード
String LINEFEEDCODE = "¥n";
// 指定改行文字数
int inputMaxTextNum = 2;
// 入力する文字数
int inputTextNum = inputText.codePointCount(0, inputText.length());
// 改行回数を計算
int lineFeedNum = inputTextNum / inputMaxTextNum;

for (int i = 0;i < lineFeedNum + 1;i ++) {
resultText += subString(inputText ,inputMaxTextNum * i ,inputMaxTextNum * i + inputMaxTextNum) + LINEFEEDCODE;
}
// 行末指定コード切る
resultText.substring(0, resultText.length() - 2);
}

public static String subString(String target, int startIndex, int endIndex) {

// 入力値の妥当性チェック省略
if (Objects.equals(null, target) || endIndex < startIndex){
return "";
}

BreakIterator bi = BreakIterator.getCharacterInstance();
bi.setText(target);

StringBuffer sb = new StringBuffer();
// 繰り返し用開始位置
int start = bi.first();
// 繰り返し用終了位置
int end = 0;
// 文字数
int count = 0;
// 文字の最後まで繰り返し
while (bi.next() != BreakIterator.DONE) {
end = bi.current();
// 文字数カウントアップ
count++;
// 引数の開始位置と終了位置の間に文字を取得する
if (count >= (startIndex + 1) && count<= endIndex) {
sb.append(target.substring(start, end));
}
start = end;
}
return sb.toString();
}

参照

http://gaishimo.hatenablog.com/entry/20101112/p1

https://qiita.com/KevinFQ/items/dd4d95bf4d3678dc650a