如何在 Java 中读取 % 字符

Posted

技术标签:

【中文标题】如何在 Java 中读取 % 字符【英文标题】:How to read % Character in Java 【发布时间】:2014-07-15 04:25:58 【问题描述】:

我必须编写一个小解析应用程序,它正在重写带有一些附加信息的 postscriptfile。

为了达到这个目标,我只是将 BufferedReader 与 FileReader 和 FileWriter 一起使用。 但我遇到了转义字符(% 符号)的问题。

Java 忽略此字符,输入文件中的“%!PS-Adobe-3.0”行将在字符串中为“!PS-Adobe-3.0”,在输出文件中也是如此。

你有什么想法吗,我该怎么做...除了按字节阅读:D

最好的问候

编辑: 这是代码片段...基本文件以 UTF8 编码:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8")); String line = br.readLine();

在我使用以下内容对其进行测试之前: BufferedReader br = new BufferedReader(new FileReader(args[0]));

在同样的问题上失败 -> 输入文件中的“%!PS-Adobe-3.0”在变量“line”中变成了“!PS-Adobe-3.0”

【问题讨论】:

在您尝试阅读的地方显示代码。 % 对于您列出的任何类都不是特别的。 您现在引用的代码不会妨碍您正确阅读%。要么角色不存在,而您只是认为它存在(也许您用来查看它的任何东西都使用 % 来表示某些东西?),或者您正在其他地方做其他事情,将其剥离或处理它特别。 这是我尝试读入 java 的 .ps 文件的第一行:%!PS-Adobe-3.0 %%Creator: CompuSet 版本 9.4.0 %%CreationDate: 5/15/2014 11:11:16 %%BoundingBox: 0 0 595 842 %%Pages: (atend) %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) 以“%%”开头的行的第一个 % 符号将也可以忽略。 不...我正在创建 BufferedReader 和下一行我正在使用 br.readLine() ...否则我应该如何“操作”它。感谢您的精彩回答 见上文:如果这些字符真的存在,它们将被上面读取。是什么让您认为他们不存在? 【参考方案1】:

% 将使用您引用的代码从文件中读取。正如我在 cmets 中所说的那样,如果字符真的存在(我希望它们存在),那么问题不在于该代码,而在于稍后的代码。

来自此评论:

%!PS-Adobe-3.0 %%Creator: CompuSet 版本 9.4.0 %%CreationDate: 5/15/2014 11:11:16 %%BoundingBox: 0 0 595 842 %%Pages: (atend) %% DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) 以“%%”开头的行的第一个 % 符号也将被忽略。

...我猜你正在使用System.out.printf 输出你正在阅读的内容,但错误的是这样的:

System.out.printf(line); // <=== Wrong

您传递给printf 的第一个字符串是一个格式化字符串,它可以是以% 开头的占位符。 %% 是一个特殊的“占位符”,输出 %

所以你并没有真正看到line 的内容。尝试改用printprintln

System.out.println(line);

...或正确使用printf

System.out.printf("%s\n", line);

%s 输出不变的字符串。

【讨论】:

以上是关于如何在 Java 中读取 % 字符的主要内容,如果未能解决你的问题,请参考以下文章

java如何读取InputStream中的字符串

java中DataInputStream如何读取我们控制台的字符串

如何在java中读取字符串中的特殊字符[关闭]

如何在while循环中读取带有空格的字符串(Java)

如何通过 Java 从 MS Access 2007 数据库中读取 Unicode 字符?

如何判断java中char是中文字符还是英文字符