Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果InputStream以';开头,如何使其跳过一行#';?_Java_Multidimensional Array_Inputstream_Qr Code - Fatal编程技术网

Java 如果InputStream以';开头,如何使其跳过一行#';?

Java 如果InputStream以';开头,如何使其跳过一行#';?,java,multidimensional-array,inputstream,qr-code,Java,Multidimensional Array,Inputstream,Qr Code,我正在写一个程序,必须解码二维码。代码在内部表示为二维布尔列表。代码通常被读取为包含1和0的文本文件,其中1表示矩阵中的暗模块(真),0表示亮模块(假) 我必须实现一种方法,它将接收一个InputStream,然后返回一个QR码。我必须阅读.txt,其中包含1、0和以“#”开头的注释行。我需要使该方法忽略这些注释行,但我不确定如何做到这一点 以下是代码的一些相关部分: 首先是二维码构造器(构造器工作中使用的所有方法,并完成其工作): 首先,我建议您使用阅读器阅读文本。然后可以使用Buffered

我正在写一个程序,必须解码二维码。代码在内部表示为二维布尔列表。代码通常被读取为包含1和0的文本文件,其中1表示矩阵中的暗模块(真),0表示亮模块(假)

我必须实现一种方法,它将接收一个InputStream,然后返回一个QR码。我必须阅读.txt,其中包含1、0和以“#”开头的注释行。我需要使该方法忽略这些注释行,但我不确定如何做到这一点

以下是代码的一些相关部分:

首先是二维码构造器(构造器工作中使用的所有方法,并完成其工作):


首先,我建议您使用
阅读器
阅读文本。然后可以使用
BufferedReader
及其
readLine()
方法来处理文本行,而不是字节流


不管怎样,给定您当前的代码:一旦您读取了
\n
,设置一个布尔标志以指示您刚刚看到一个新行字符。然后,当您开始阅读下一行时,打开该标志,如果该标志为真,并且您看到一个
#
作为下一个字符,您应该一直阅读,直到看到另一个
\n
。如果该标志不正确,则在执行操作时阅读该行的其余部分


当你想找到这个代码时,你可能想考虑空格,这取决于你希望它是多么宽松。

如果你决定使用阅读器,那么你可以使用正则表达式来对包含除“0”和“1”之外的任何字符的线条进行元素化。您可以在下面的链接中找到有关正则表达式用法的详细信息。

您只能修改1和0的正则表达式,如
String regex=“[0-1]+”

之后可以使用下面的示例代码来获取每个字符

String s1="hello";
char[] ch=s1.toCharArray();

为什么不使用
Files.lines
而不是
InputStream

Files.lines(Paths.get("path_to_File.txt")).filter(s -> !s.contains("#"));// let's
//read all lines form the file and skip the lines with `#` symbol
然后我们可以将每一行转换为一个布尔值列表:

s -> Stream.of(s.split(" ")).map("1"::equals).collect(Collectors.toList())// split 
string by ` ` (space) symbol and convert to Boolean "1" - true, "0" - false
现在让我们把所有的东西放在一起:

List<List<Boolean>> qr = Files.lines(Paths.get("data/fromFile.txt"))
                .filter(s -> !s.contains("#")).map(
                        s -> Stream.of(s.split(" ")).map("1"::equals)
                            .collect(Collectors.toList())
                ).collect(Collectors.toList());
输出将是

[true, true, true]
[true, false, true]

如果您正在阅读文本,则应使用
读取器
,而不是
输入流
。然后,您可以使用一个
BufferedReader
,它有一个
readLine()
方法。问题是,我从赋值中给出了这些方法,它必须完全按照给定的方式实现,我不能更改其中的任何内容。您可以将
InputStream
转换为
BufferedReader
,就像这样:
new BufferedReader(新的InputStreamReader(inputStream));
s -> Stream.of(s.split(" ")).map("1"::equals).collect(Collectors.toList())// split 
string by ` ` (space) symbol and convert to Boolean "1" - true, "0" - false
List<List<Boolean>> qr = Files.lines(Paths.get("data/fromFile.txt"))
                .filter(s -> !s.contains("#")).map(
                        s -> Stream.of(s.split(" ")).map("1"::equals)
                            .collect(Collectors.toList())
                ).collect(Collectors.toList());
# name: small
# type: bool matrix
# rows: 1
# columns: 3
1 1 1
1 0 1
[true, true, true]
[true, false, true]