【问题标题】:Java Group SeparatorJava 组分隔符
【发布时间】:2021-07-09 15:39:30
【问题描述】:

我正在尝试使用组分隔符创建一个文本文件,但找不到任何有关如何执行此操作的语法。 例如,如果我有两个字符串,我需要通过 Java 在文本文件中创建类似下面的内容。

String a="HREC";
String b="ZZ";

最终输出应显示如下图所示的组分隔符

HRECZZ

还有办法吗?

【问题讨论】:

  • GS 的十六进制值是多少?
  • @PM77-1 GS(组分隔符)在 ASCII 中是 0x1D。
  • @MarkRotteveel 我不明白你对这个问题的关闭。本题与discussed in your linked Question这样的字节无关,无需操作八位字节即可回答。
  • @BasilBourque 接受的答案显示了如何将控制字符写入字符流。
  • @MarkRotteveel 但是 question 不是重复的。而且,读者必须深入研究答案才能发现这里恰好是解决方案的部分。我很欣赏尝试将不必要的问题作为重复来关闭;我自己也经常这样做。但事实并非如此。

标签: java ascii


【解决方案1】:

Unicode 代码点

在传递该字符的Unicode code point 时调用Character.toString

了解UnicodeUS-ASCII 的超集。 ASCII 中的所有 128 个字符构成了 Unicode 中定义的 144,697 个字符中的前 128 个字符,位于代码点 0-127。

对于组分隔符不可打印字符,其代码点的十进制整数为 29。

\u001D

您可以使用其十六进制版本1D 作为String 文字中的转义Unicode 代码点写入该数字29\u001D

"dog\u001Dcat"  // A string of seven characters.

Character.toString( 29 )

为了经常使用,定义一个常量。

调用Character.toString( 29 ) 会生成一个String,其中包含一个字符,即您的组分隔符。

final String FILE_SEPARATOR = Character.toString( 28 ) ;
final String GROUP_SEPARATOR = Character.toString( 29 ) ;
final String RECORD_SEPARATOR = Character.toString( 30 ) ;
final String UNIT_SEPARATOR = Character.toString( 31 ) ;

或者用静态创建一个类。为简洁起见,我们使用 ASCII 中定义的两个字符的缩写名称。

public class Ascii 
{
    static final String FS = Character.toString( 28 ) ;
    static final String GS= Character.toString( 29 ) ;
    static final String RS= Character.toString( 30 ) ;
    static final String US= Character.toString( 31 ) ;
}

用法:

myStringBuilder.append( Ascii.GS ) ;

如果不熟悉这些分隔符,请参阅问题What are the file/group/record/unit separator control characters and their usage?


顺便说一句,在研究这个问题时,我发现 Unicode 还定义了一个字符 SYMBOL FOR GROUP SEPARATOR(代码点 9,245),用于需要明显显示某些内容的文档,这意味着不可打印的字符。

【讨论】:

  • GS等也可以使用"\u001D"
  • @MarkRotteveel 我添加了对字符串文字方法的提及。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多