Java 如何阻止程序复制前面有/r/n的行?

Java 如何阻止程序复制前面有/r/n的行?,java,Java,当我在某些字符前面读入/r/n时,部分就不起作用了,它做了我想做的事情,然后复制行并保留/r/n 我已经写了一个程序,我希望它扫描一个文件,并用我想要的值替换特殊字符 请问我有什么遗漏吗 看看下面的代码 public synchronized String theMessage() { int type; String rmCarReturn; String newLine; String val; String str = "", fin = "";

当我在某些字符前面读入/r/n时,部分就不起作用了,它做了我想做的事情,然后复制行并保留/r/n

我已经写了一个程序,我希望它扫描一个文件,并用我想要的值替换特殊字符

请问我有什么遗漏吗

看看下面的代码

public synchronized String theMessage() {
    int type;
    String rmCarReturn;
    String newLine;
    String val;
    String str = "", fin = "";
    String par;
    int index = -1;
    Scanner sc = new Scanner(message);
    while (sc.hasNextLine()) {
        str = sc.nextLine();
        if (str.isEmpty())
            ;
        else if (str.charAt(0) == '<') {
            par = str.substring(1, str.indexOf('>'));
            if ((index = param.indexOf(par + "//" + messages)) != -1) {
                par += "//" + messages;
            } else
                index = param.indexOf(par);
            if (index < 0) {
                logger.info("Param " + par + "not found");
                sc.close();
                throw new paramNotFoundException(par + "not found");
            } else {
                type = param.getType(par);
                val = param.getValue(par);
                if (type == 0)
                    fin += val;
                if (type == 1) {
                    fin += loadData(par);
                }
                if (type == 2) {
                    fin += calculateCorrelation(par);
                }
                if (type == 3) {
                    fin += loadFunctons(par);
                }
            }
        }
        if (str.charAt(0) == '/')
            fin += str.substring(1);
        //Carriage return
        if(str.substring(0, Math.min(str.length(),4)).equals("\\r\\n")){
            rmCarReturn = str.substring(4);
            newLine = (String.format("%n") + rmCarReturn );
            fin += newLine;
        }
        if((str.substring(str.length() - 4).equals("\\r\\n"))){
            rmCarReturn = str.substring(0, str.length()-4);
            newLine = rmCarReturn + String.format("%n");
            fin += newLine;
            }
        //End of Carriage return
        else {
            fin += str;
        }
    }
    sc.close();
    data.nextIteration();
    return fin;
}
公共同步字符串theMessage(){
int型;
字符串rmCarReturn;
字符串换行符;
字符串val;
字符串str=“”,fin=“”;
弦杆;
int指数=-1;
扫描仪sc=新扫描仪(信息);
while(sc.hasNextLine()){
str=sc.nextLine();
if(str.isEmpty())
;
else如果(str.charAt(0)='');
如果((索引=参数indexOf(par+“/”+消息))!=-1){
PA+=“//”+消息;
}否则
指数=参数指数(par);
如果(指数<0){
信息(“PARAM”+ PAR +“未找到”);
sc.close();
抛出新的paramNotFoundException(par+“未找到”);
}否则{
类型=参数getType(par);
val=参数getValue(par);
如果(类型==0)
fin+=val;
如果(类型==1){
fin+=载荷数据(par);
}
如果(类型==2){
fin+=计算相关性(par);
}
如果(类型==3){
fin+=荷载函数(par);
}
}
}
如果(str.charAt(0)='/'))
fin+=str.substring(1);
//回车
如果(str.substring(0,Math.min(str.length(),4)).equals(“\\r\\n”)){
rmCarReturn=str.substring(4);
换行符=(String.format(“%n”)+rmCarReturn);
fin+=换行符;
}
if((str.substring(str.length()-4).equals(\\r\\n”)){
rmCarReturn=str.substring(0,str.length()-4);
换行符=rmCarReturn+String.format(“%n”);
fin+=换行符;
}
//运输结束返回
否则{
fin+=str;
}
}
sc.close();
data.nextIteration();
回流翅片;
}

最简单的方法是将原始行(您已经是红色)保留在变量中,然后通过替换新行来提取您需要的内容
/r/n
。处理完所需内容后,继续迭代文件,逐行读取。大概是这样的:

try( BufferedReader reader = new BufferedReader( ... ) ) {
  reader.lines().foreach( line -> processLine( line ) );
} 

在您的
处理行(字符串行)
中,使用字符串的
replaceAll((\\\\r)\\\\n“,”)
传递并提取行的内容。如果您不想将输入作为文本处理,请不要使用
扫描仪。改为使用
InputStream
,并将输入视为字节。如果你重新表述以“除…之外的每件事都有效”开头的句子,以便更多的人能理解它,你将增加获得答案的机会。@Siguza我不同意这样的建议。如果他在处理角色,那么他需要用角色替换角色。这意味着读者/作者或基于这两个类之一的东西。流读取和写入的字节在替换可能只是字符“一部分”的字节时会以意外的方式失败。很明显,他将其视为文本,使用字符串长度并搜索ASCII控制字符。