我正在尝试编写一个简单的程序来计算 | 的数量管道分隔值文件中特定输入值出现之前的一行中出现的管道。
我尝试创建一个 while 循环,遍历文件的每个字符,并在每次 FileInputStream.read() 的值返回 124(Pipe 的字节值)时递增 1,但如果 FileInputStream.read 则重置为 0 () 返回 10(新行的字节值)并增加行计数器 + 1。
while((filereader=fis.read())!=searchValue){
int filereader = byteVal;
if(byteVal == 10)
{
lineCt++;
finalPipCT = 0;
if(byteVal == 124)
{
pipeCtr++;
}
finalPipCT = finalPipCt + lineCt;
System.out.println("Data: " + sippyStraw + "\t" + (char)sippyStraw);
}
System.out.println("Total | in line: "+ finalPipCT );
System.out.println("Total lines til value: "+ lineCt );
}
如果文本文件是这样的:
|a|b|c|
|d|e|f
|g|h|i|j|
|k|l|m||n|
并且 searchValue 是“h”,我希望它返回:
Total | in line: 2
Total Lines til value: 3
在值 h 匹配之前,从该行的开头开始,该行中出现的管道数。
最佳答案
这对我有用:
String text = "|a|b|c|\n" +
"|d|e|f\n" +
"|g|h|i|j|";
int lineCt = 1;
int finalPipCT = 0;
int searchVal = 104;
for(int i = 0; i < text.length() && text.charAt(i) != 'h'; i++) {
//while (scanner.hasNextByte() && (scanner.nextByte() != searchVal)) {
int byteVal = (byte) text.charAt(i);
if(byteVal == 10) {
lineCt++;
finalPipCT = 0;
}
if(byteVal == 124) {
finalPipCT++;
}
}
System.out.println("Total | in line: "+ finalPipCT );
System.out.println("Total lines til value: "+ lineCt );
<小时/>
我删除了一些东西,比如 "System.out.println("数据:"+ sippyStraw + "\t"+ (char)sippyStraw);"
和“finalPipCT = FinalPipCt + lineCt;”
我还使用了字符串而不是您的文件。
关于java - 为什么我的 while 循环没有从文件中返回正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252180/