gpt4 book ai didi

java - 如何显示带空格的制表符?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:21 25 4
gpt4 key购买 nike

我有一个 java 程序,我从带有网格的 JPanel 上的文本文件中绘制每个字符(在其自己的框架中)。

left- JPanel, right- text document每个字符都在自己的框架中,但是当涉及到选项卡时就会出现问题。我尝试用 8 个空格替换所有制表符,但问题是(如上图所示)不一致,因为制表符并不总是 8 个字符长。 有没有办法计算出一个选项卡使用了多少个“空格”?或者关于如何获得与文本文件中相同的布局的任何其他建议?

绘制文字代码:

g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
Font font = new Font("monospaced", Font.PLAIN, 18);
g2.setColor(Color.BLACK);
g2.setFont(font);
String lines[] = LabAgentComponent.PASTE.split("\\r?\\n");
for (int i=0; i<lines.length; i++) {
for(int j=0; j<lines[i].length(); j++) {
g2.drawString(Character.toString(lines[i].charAt(j)), j * gridSize, (i+1) * gridSize);
}
}

最佳答案

您可以检查制表符前的字符串长度。

Al203 的情况下,这将是 5。您的制表符应从下一个 8 的倍数开始,中间至少有 1 个空格。

这里有一个小类可以帮助你:

public class TabToSpaces
{
public static void main(String[] args) {
System.out.println(replaceTab("\tb", 8, "."));
System.out.println(replaceTab("a\tb", 8, "."));
System.out.println(replaceTab("abcdefg\th", 8, "."));
System.out.println(replaceTab("abcdefgh\ti", 8, "."));
System.out.println(replaceTab("a\tb\tc\td\te", 8, "."));
System.out.println(replaceTab("ab\tb\tc\td\te", 8, "."));
}

private static String replaceTab(String string, int tabSize, String space) {
Pattern pattern = Pattern.compile("\t");
Matcher matcher = pattern.matcher(string);
StringBuffer sb = new StringBuffer();
int offset = 0;
while (matcher.find()) {
int beforeLength = matcher.start() + offset;
int spacesNeeded = (int) (Math.ceil((beforeLength + 1.0) / tabSize) * tabSize) - beforeLength;
offset += spacesNeeded - 1;
String spaces = new String(new char[spacesNeeded]).replace("\0", space);
matcher.appendReplacement(sb, spaces);
}
matcher.appendTail(sb);
return sb.toString();
}
}

输出:

........b
a.......b
abcdefg.h
abcdefgh........i
a.......b.......c.......d.......e
ab......b.......c.......d.......e

我用点来使空格的位置更清楚。

关于java - 如何显示带空格的制表符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com