問題不在於isDigit
檢測,問題是builder.insert(i, "\n");
!
試試這個,它的工作原理沒有insert
:
@org.junit.Test
public void endodingTest() {
String text = "07:10Ο Σκούμπι Ντου & ο κολλητός....";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if(Character.isDigit(c)) {
builder.append("\n");
}
builder.append(c);
}
System.out.println(builder.toString());
}
的問題是,你在字符串生成器插入額外\n
是每次,該行突破後每字符變爲向後移動一個字符。要糾正這一點,你要算你已經插入linebreakes,如果你插入一個新的,你必須在位置i + numberOfAlreadyInsertedLineBreaks
(builder.insert(i + numberOfAlreadyInsertedLineBreaks, "\n");
) 完成下面的例子)
的第二件事情,將其插入當然(但你已經知道了)是你必須改善你的模式,所以最後這是精靈
@org.junit.Test
public void endodingTest() {
String text = "07:10Ο Σκούμπι Ντου & ο κολλητός του07:30Πρωϊνή μελέτη10:15Νηστικοί πράκτορες11:15Σαρίτα, είσαι η ζωή μου12:50Οι ειδήσεις του Star13:45Made in Star15:45Μίλα17:45Ειδήσεις17:50Φώτης - Μαρία live19:45Οι ειδήσεις του Star21:00Ο Χαρί Πότερ και ο ημίαιμος πρίγκιψ00:15Σχολή για απατεώνες01:15Supernatural";
StringBuilder builder = new StringBuilder(text);
int numberOfAlreadyInsertedLineBreaks = 0;
for (int i = 0; i < text.length(); i++) {
if (match(text, i)) {
builder.insert(i + numberOfAlreadyInsertedLineBreaks, '\n');
numberOfAlreadyInsertedLineBreaks++;
}
}
System.out.println(builder.toString());
}
private boolean match(String text, int i) {
return Character.isDigit(text.charAt(i))
&& Character.isDigit(text.charAt(i + 1))
&& text.charAt(i + 2) == ':'
&& Character.isDigit(text.charAt(i + 3))
&& Character.isDigit(text.charAt(i + 4));
}
你不能使用正則表達式? – 2011-12-02 17:17:03
請清理你的問題。你的例子沒有希臘字母,你聲稱是你的問題的來源。字符串「00:23」「12:45」在您的示例字符串中出現0次。您的示例輸出似乎與您的示例輸入無關。 「06:45」和「06.45」之間有意義的區別嗎?我注意到您的示例輸入中有一個「56:65」。 「99:99」是有效的時間嗎?那麼「11111.99」呢?如果你能澄清/清理,我可以幫忙。 – ccoakley
@ccoakley這只是一個例子,好吧,我引用了原文,看看它是怎麼回事。 –