2016-03-23 6 views
0

Ich hatte eine Programmierübung, wo wir eine Formatmethode schreiben mussten, die als Parameter eine Zeichenfolge als Texteingabe, die wir formatieren wollen, und eine ganze Zahl als Länge der Zeilen, die wir wollen, nehmen würde.Es ist möglich, eine Referenz in einem Regex-Quantifizierer in Java zu übergeben?

Wir hatten auch bestimmte Regeln, und eine von ihnen war: Wenn ein Wort länger als die gewünschte Länge ist, sollte es auf einer Zeile für sich gehen.

So eine einfache Möglichkeit, dies zu tun, war mit einem regulären Ausdruck eine Reihe von nicht-weißen Raum Zeichen suchen mindestens Länge und möglicherweise mehr zu sein, und dies auf jeder Seite durch mich selbst mit zwei \ n abgestimmt zu ersetzen ...

vielleicht ist der Code klarer: lassen Sie uns unsere gewünschte Zeilenlänge vorstellen, 10

String s = line.replaceAll("([ \t])(\\S{10,})([ \t])", "\n$2\n"); 
    System.out.println(s); 

ist eigentlich gut funktioniert.

Mein Problem ist, dass die Zeilenlänge als Parameter an die Formatmethode übergeben werden sollte; Ich kann also nur auf diesen Parameter verweisen, indem ich seine Referenz verwende. Zum Beispiel:

public static String-Format (String s, int Länge) {...

// fehlenden Sachen

String s = line.replaceAll ("([\ t]) (\ S {Länge,}) ([\ t]) "," \ n $ 2 \ n "); System.out.println (s);

jedoch in diesem Fall wird es einen Fehler zurück: Pattern

Meine Frage ist: Gibt es eine Möglichkeit, einen Verweis in eine quantifier zu verwenden (anstelle einer Zahl), als Argument für die Anzahl von Vorkommen wir wollen passen? Wie es scheint, wäre es wirklich nützlich, ich war überrascht, dass es nicht zu funktionieren schien. Es sieht auch nicht so aus, als wären viele Leute auf dieses Problem gestoßen.

Antwort

2

versuchen diese

String s = line.replaceAll("([ \t])(\S{"+length+",})([ \t])", "\n$2\n"); 
System.out.println(s); 
Verwandte Themen