Ich möchte nach ca. 200 Zeichen oder das nächste Sonderzeichen:Split String nach ca. 100 Zeichen und nächstes Zeichen (Java)
Die Zeichenfolge ist wie <data>|...|<data>|
formatiert, wobei ein <data>
Block zwischen 30 und 70 Zeichen ist.
My gewünschtes Ergebnis wäre ein String-Array sein, wie
<data>|<data>|
<data>|
<data>|<data>|<data>|
wo jede Zeile ca. 200 Zeichen lang ist.
Mein Code sieht aus wie
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
public class RegexpTest {
@Test
public void testRegexp() throws Exception {
String data = "Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|Symbol Ticker:1466654463000:157.71:TRADE:42|";
String pat = ".{1,200}(\\d|\\s|\\w|\\.|\\:{1,70})\\|";
String ans = data.replaceAll(pat, "X");
//Pattern regex = Pattern.compile(pat);
//Matcher regexMatcher = regex.matcher(str);
System.out.println(data.length()); //prints 528
System.out.println(ans.length()); //prints 3
}
}
Das Ergebnis, eine korrekte Menge an Ersatz erzeugt (3), aber das Gesamtergebnis sollte ein String-Array sein.
Gibt es eine Regexp (ähnlich SO Q&A), die dieses Problem behandeln könnte? Eine Lösung mit for-Schleifen ist ebenfalls akzeptabel.
Scratch Pad:
Fühlen Sie sich frei auf regex101.com zu testen (mit meinem Versuch, und die Testdaten)
ich einen Fehler mit dem Code in der ersten println erhalten: 'str' ist nicht definiert. – sotix
Warum teilst du es nicht auf jeden speziellen Charakter und rekonstruierst es dann? Langsamer, aber einfacher zu machen. – user3719857
@Sotix: 'str' ist fest – Markus