Java 如何阻止程序复制前面有/r/n的行?
当我在某些字符前面读入/r/n时,部分就不起作用了,它做了我想做的事情,然后复制行并保留/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 = "";
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控制字符。