字符串中的java十六进制数据

时间:2016-11-27 20:51:51

标签: java string hex

我在JAVA中使用PDFBOX读取了一个PDF文件,并将数据转换为文本并保存为字符串。我发现许多文本数据被X'C2A0'包围。例如:

X'436C756233AC2A04469616D6F6E64C2A0'       Club:__Diamond__

__是X'C2A0'

我想搜索“Club:__,然后解析2 __ for”Diamond“。我尝试过类似的事情:

String TAG = "\\xC2A0";                     // Tag in PDF

int pos = text.indexOf(TAG, positionInText);

但我从来没有得到任何打击。如何指定TAG?

编辑:

可能需要做一些澄清。我使用了PDFBOX:

   public void toText() throws IOException
   {
       this.pdfStripper = null;
       this.pdDoc = null;
       this.cosDoc = null;

       file = new File(filePath);
       parser = new PDFParser(new RandomAccessFile(file,"r"));      // update for PDFBox V 2.0

       parser.parse();
       cosDoc = parser.getDocument();
       pdfStripper = new PDFTextStripper();
       pdDoc = new PDDocument(cosDoc);
       pdDoc.getNumberOfPages();
       pdfStripper.setStartPage(1);
       pdfStripper.setEndPage(10);

       // reading text from page 1 to 10
       // if you want to get text from full pdf file use this code
       // pdfStripper.setEndPage(pdDoc.getNumberOfPages());

       text = pdfStripper.getText(pdDoc);

text是一个定义为String的字段。这个文本字符串是我试图解析的内容。

2 个答案:

答案 0 :(得分:1)

如果您搜索的字符串本身是十六进制编码的,或者是一个普通字符串,文件中包含字符值为0xc2a0的2字节序列,那么您的问题并不完全清楚。

假设后一种情况,在文件中,序列0xA0是Unicode代码点 的UTF-8编码,这是与{{1}对应的非中断空格HTML中的实体。

如果文件包含这些双字节序列,那么当读入Java字符串时(假设您使用UTF-8编码来解释字节流),那么每个序列将成为单个0xA0在你的字符串中。

您应该能够编写正则表达式来查找由这些对分隔的数据。

答案 1 :(得分:0)

@Jim Garrison你的回答让我搜索。我还是不懂UTF-8编码。你的最后两段是正确的。我猜PDFBOX正在使用UTF-8来读取PDF文件。我使用了以下内容:

private final String TAG = "\u00A0";                    // Tag &nbsp X'C2A0'

在两个x' C2A0'之间查找和解析数据标签