Gætter på at det er Text og TextFlow fra JavaFX du arbejder med.
Som Jannik siger skal du ikke bruge "[" og "]" i dette tilfælde. De tegn bruges til at lave character classes, som er en mængde af tegn. Men \s er allerede en mængde af tegn, de tegn som betegner whitespace.
Når du splitter strengene forsvinder selve teksten du splitter med, så hvis du splitter på \s forsvinder alt whitespace inklusiv newline. Derfor bliver de ikke tegnet.
For at beholde newlines kan du splitte først udelukkende på dem og manuelt genindsætte newlines. For hver linje kan du så splitte på \s for at finde tokens.
En mindre detalje er at i stedet for at splitte på \s bør du splitte på \s+. Så kommer der færre tomme arrays hvis der f.eks. er mere end 1 whitespace mellem to. Visuelt gør det nok ingen forskel men du slipper for at lave en masse Text objekter med tomme strenge.
Jeg har ikke testet koden nedenunder. Men først splittes der på linje. Linje splittes for token med \s+ og der laves Text-objekter. Efter alle tokens på den linje er behandlet indsættes der en newline Text objekt.
- public HashSet getKeywords() {
- HashSet<String> keywords = new HashSet<>();
- keywords.add("if");
- keywords.add("else if");
- keywords.add("else");
- keywords.add("public");
- keywords.add("private");
- keywords.add("protected");
- keywords.add("try");
- keywords.add("catch");
- keywords.add("final");
- keywords.add("abstract");
- keywords.add("extends");
- keywords.add("implements");
- keywords.add("import");
- keywords.add("package");
- keywords.add("System");
- return keywords;
- }
-
- public void unknownMethod() {
- String text = "Hell World \n if public";
- final HashSet<String> keywords = getKeywords();
- for (String line : text.split("\n")) {
- for (String token : line.split("\\s+")) {
- Text textToken = new Text(token + " ");
- String id = "StandardText";
- if (keywords.contains(token)) {
- id = token;
- }
- textToken.setId(id);
- getChildren().add(textToken);
- }
- //Add the newline
- getChildren().add(new Text("\n"));
- }
- }
Indlæg senest redigeret d. 15.12.2014 00:41 af Bruger #14645