gpt4 book ai didi

java - 制表符、换行符、DocumentFilters 和 eclipse 文本

转载 作者:行者123 更新时间:2023-12-01 14:53:43 25 4
gpt4 key购买 nike

所以,我还有一个关于 THIS 的问题问题。

应用修复后,转到记事本,用一些随机字符输入一堆制表符和换行符,然后将它们粘贴到我的程序中,一切都很顺利。

但是,作为带有一堆选项卡和换行符的最接近的文本,我尝试将代码本身的一部分粘贴到 JTextArea。所有制表符和换行符都卡在那里并且没有被过滤掉。

虽然我的用户可能不会将 Eclipse 代码粘贴到我的程序中,但我不能确定 Eclipse 代码是唯一的异常(exception)。所以我想知道为什么会发生这种情况。

另外,我希望我的代码能够过滤掉除空格字符之外的空白字符,并将它们转换为空格字符。我认为制表符和换行符是唯一的,但如果还有更多,请告诉我。

无论如何,我需要更改什么才能使其正常工作?

这是固定的 SSCCE:

package core;

import java.awt.BorderLayout; import java.awt.Dimension; import java.io.FileNotFoundException; import java.io.IOException;

import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DocumentFilter;

class DefaultDocFilter extends DocumentFilter {
public void insertString(FilterBypass fb, int offs,String str, AttributeSet a) throws BadLocationException
{
if ((fb.getDocument().getLength() + str.length()) <= 2000)
{
str = str.replaceAll("\n", " ");
str = str.replaceAll("\t", " ");
fb.insertString(offs, str, a);
}
else
{
int spaceLeft = 2000 - fb.getDocument().getLength();
if (spaceLeft <= 0)
return;

str = str.substring(0, spaceLeft);
str = str.replaceAll("\n", " ");
str = str.replaceAll("\t", " ");

fb.insertString(offs, str, a);
}
}

public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a) throws BadLocationException
{
if (str.equals("\n") || str.equals("\t"))
{
str = "";
}
if ((fb.getDocument().getLength() + str.length() - length) <= 2000)
{
str = str.replaceAll("\n", " ");
str = str.replaceAll("\t", " ");
fb.replace(offs, length, str, a);
}
else
{
int spaceLeft = 2000 - fb.getDocument().getLength() + length;
if (spaceLeft <= 0)
return;

fb.replace(offs, length, str.substring(0,spaceLeft).replaceAll("\n", " "), a);
}
} }


public class Main {
public static JFrame mWindow;

public static void main(String[] args) throws FileNotFoundException, IOException
{
//create main window
mWindow = new JFrame("title");
mWindow.setSize(1000, 800);
mWindow.setMinimumSize(new Dimension(1000, 800));
mWindow.setLocationRelativeTo(null);
mWindow.setLayout(new BorderLayout());
mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JTextArea a = new JTextArea();
AbstractDocument doc = (AbstractDocument) a.getDocument();
doc.setDocumentFilter(new DefaultDocFilter());
a.setLineWrap(true);
a.setWrapStyleWord(true);

mWindow.add(a);
mWindow.pack();

mWindow.setVisible(true);

mWindow.repaint();
mWindow.validate();
} }

这是 Java 1.7。新建一个项目,打包core,文件Main。

文档过滤器是第一个类,它应用于您将看到的 JTextArea。您需要的一切都在该类中。

编辑:我修复了 SSCCE。另外,只有当您尝试粘贴更多适合 JTextArea 的字符时才会出现此问题(我将限制设置为 2000)。那么 tas 和换行符就不会被过滤掉。

最佳答案

replace方法中,在该方法的else部分,只替换“\n”,不替换“\t”

关于java - 制表符、换行符、DocumentFilters 和 eclipse 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526591/

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