如何在 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
的内容。尝试改用print
或println
:
System.out.println(line);
...或正确使用printf
:
System.out.printf("%s\n", line);
%s
输出不变的字符串。
【讨论】:
以上是关于如何在 Java 中读取 % 字符的主要内容,如果未能解决你的问题,请参考以下文章
java中DataInputStream如何读取我们控制台的字符串