Ich habe eine abgrenzende Datei, die ein Schmerz zum Lesen sein kann. Daher habe ich eine Swing -Anwendung, die den Inhalt der Dateien aufnimmt und sie in eine jTextArea steckt. Japanische und koreanische Charaktere können mehr Länge als ein lateinisches Einsatz haben, sodass ich FontrenderContext verwendet habe, um dabei zu helfen. Ich habe versucht, Charakter zu verwenden. Unicodeblock für die verschiedenen Sprachen, aber das hat nicht funktioniert. Diese Methoden haben mich nahe gebracht. Wenn die japanische Saite die längste von dem Haufen war, die es funktioniert hat, aber wenn dies nicht der Fall ist, wird sie 2 Leerzeichen länger als erledigt als es sollte. < /P>
public static int getDisplayWidth(String text, Font font) {
FontMetrics metrics = new JLabel().getFontMetrics(font);
int width = 0;
int spaceWidth = metrics.charWidth(' ');// Get width of a monospaced space
FontRenderContext frc = new FontRenderContext(null, true, true);
for (char c : text.toCharArray()) {
TextLayout layout = new TextLayout(String.valueOf(c), font, frc);
double charWidth = layout.getBounds().getWidth();
//this is close
if (charWidth > spaceWidth) {
width += Math.max(1, (int) Math.round(charWidth / (double) spaceWidth));
} else {
width += 1; // Treat half-width and Latin characters as taking 1 space
}
}
return width ;
}
private static String padToWidth(String text, int width) {
//int textWidth = getDisplayWidth(text);
int textWidth = getDisplayWidth(text,new Font("Monospaced",Font.PLAIN,20));
int padding = width - textWidth;
return text + " ".repeat(Math.max(0, padding));
}
< /code>
Ich war ziemlich verblüfft darüber, was die Polsterung nicht korrekt macht. Ich kann den gesamten Code und meine Beispieldaten auch bei Bedarf teilen. Ich wollte den Beitrag nur nicht überfluten. < /P>
Bearbeiten: Beispieldaten < /p>
asdasdasdasdasd|a||0|
qweas|aa|||
end|aaaa||平仮名 ひらがな|
filler|zz||qweas|
!|idk||pen|
@|names||ANYthing that is not pencils|
ㄱ넣튜ㅓ,ㅣㅎㅌ|korean|||
Ich habe eine abgrenzende Datei, die ein Schmerz zum Lesen sein kann. Daher habe ich eine Swing -Anwendung, die den Inhalt der Dateien aufnimmt und sie in eine jTextArea steckt. Japanische und koreanische Charaktere können mehr Länge als ein lateinisches Einsatz haben, sodass ich FontrenderContext verwendet habe, um dabei zu helfen. Ich habe versucht, Charakter zu verwenden. Unicodeblock für die verschiedenen Sprachen, aber das hat nicht funktioniert. Diese Methoden haben mich nahe gebracht. Wenn die japanische Saite die längste von dem Haufen war, die es funktioniert hat, aber wenn dies nicht der Fall ist, wird sie 2 Leerzeichen länger als erledigt als es sollte. < /P> [code] public static int getDisplayWidth(String text, Font font) { FontMetrics metrics = new JLabel().getFontMetrics(font); int width = 0; int spaceWidth = metrics.charWidth(' ');// Get width of a monospaced space FontRenderContext frc = new FontRenderContext(null, true, true);
for (char c : text.toCharArray()) { TextLayout layout = new TextLayout(String.valueOf(c), font, frc); double charWidth = layout.getBounds().getWidth();
//this is close if (charWidth > spaceWidth) { width += Math.max(1, (int) Math.round(charWidth / (double) spaceWidth)); } else { width += 1; // Treat half-width and Latin characters as taking 1 space } } return width ; }
private static String padToWidth(String text, int width) { //int textWidth = getDisplayWidth(text); int textWidth = getDisplayWidth(text,new Font("Monospaced",Font.PLAIN,20)); int padding = width - textWidth; return text + " ".repeat(Math.max(0, padding)); } < /code> Ich war ziemlich verblüfft darüber, was die Polsterung nicht korrekt macht. Ich kann den gesamten Code und meine Beispieldaten auch bei Bedarf teilen. Ich wollte den Beitrag nur nicht überfluten. < /P> Bearbeiten: Beispieldaten < /p> asdasdasdasdasd|a||0| qweas|aa||| end|aaaa||平仮名 ひらがな| filler|zz||qweas| !|idk||pen| @|names||ANYthing that is not pencils| ㄱ넣튜ㅓ,ㅣㅎㅌ|korean||| [/code] Ganze Codebasis bei Bedarf: https://sourceb.in/mxsslwpfbx
Ich habe die folgenden Codezeilen in meiner Apache Camel-Route:
.split().method(SomeDataCacheSplitter.class, split ).streaming()
.marshal(gsonDataFormat)
.aggregate(constant(true), new...