gpt4 book ai didi

java - 如何在 JAVAFx 中接受来自 TextField 的 SOH 字符

转载 作者:行者123 更新时间:2023-11-30 06:46:22 25 4
gpt4 key购买 nike

我编写了简单的 GUI 屏幕,它实际上包含一个 JavaFx 文本字段,用户在其中输入一个字符串,我必须将该字符串传递给 TCP 客户端。

现在的问题是用户输入了一个包含 SOH 作为分隔符的字符串。SOH 只不过是“\u001”。但是,当用户输入包含此分隔符的字符串时,它会被删除,并且只会检索到简单的纯文本。我怎样才能消除这个。这种独特的性格对我来说非常重要。例如我的字符串如下:

8=FIX.4.2\u001 9=9 \u001 35=A \u001 34=1\u001 49=TTDS68AP

观察上面的字符串,其中我有代表 SOH 的\u001 字符。但是当我在 TextField 中输入这个字符串时,结果是这样的:

8=FIX.4.29=9135=A34=149=TTDS68AP

如何从文本字段中获取 SOH 字符?

最佳答案

问题是 javaFX TextField 使用以下 function 过滤无效字符:

private static boolean isInvalidCharacter(char c, boolean newlineIllegal, boolean tabIllegal) {
if (c == 0x7F) return true;
if (c == 0xA) return newlineIllegal;
if (c == 0x9) return tabIllegal;
if (c < 0x20) return true;
return false;
}

这发生在粘贴之后和字符串存储在字段中之前。在调用此函数之前,可以设置和应用自定义过滤器,在此过滤器中,您可以将 SOH 更改为其他内容;它是 unicode 表示 是一个很好的候选人:

textField.setTextFormatter(new TextFormatter<>((t) -> {
t.setText(t.getText().replace((char)1, '\u2401'));
return t;
}));

添加上面的内容会在粘贴之后和存储之前更改它。当您想使用文本字段中的 String 时,您需要将其替换回 SOH :

String withSOH = field.getText().replace('\u2401', (char)1);

关于java - 如何在 JAVAFx 中接受来自 TextField 的 SOH 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631511/

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