[英]how can I skip the '\n' in this code
我有下一個代碼,它將打開一個文件:
procedure TeTruena is
PI : constant Float := 3.141592;
MAX: constant Int := 30;
type Array is array(1 .. MAX ) de
Int;
type Matrix es array( 1 .. MAX, 1.. MAX )
of Int;
而且我必須用類似這樣的標記來分隔該文件的每個單詞:
程序(一個令牌),is(另一個令牌)等。
該代碼應該完成所有這些操作:
public class Lexic {
public static void main(String[] args) {
int car;
String nameFile,lexem;
Scanner t = new Scanner(System.in);
System.out.print("Give me the name of the file: ");
nameFile = t.nextLine();
t.close();
try
{
File file = new File(nombreArchivo);
RandomAccessFile af = new RandomAccessFile(file,"r");
while((car = af.read()) != -1)
{
if(car != ' ' && car != '\n')
{
lexem = Lexic.readFile(nameFile,af);
System.out.print("["+lexem+"]");
}
}
af.close();
}
catch(IOException ex)
{
System.out.println("Can not open file");
}
}
public static String readFile(String name,RandomAccessFile r)
{
int car;
char c;
long position;
String s = null;
StringBuilder sb = new StringBuilder();
try
{
position = r.getFilePointer();
r.seek(position-1);
car = r.read();
if(specialChar(car))
{
c = (char)car;
sb.append(c);
s = sb.toString();
}
else
{
while((car != -1) && (car != ' ') && (car!= '\n') && (!specialChar(car)))
{
c = (char)car;
sb.append(c);
car = r.read();
s = sb.toString();
}
if(esCaracterEspecial(car))
{
position = r.getFilePointer();
r.seek(position-1);
}
}
}
catch(IOException ex)
{
System.out.println("Can not open file");
}
return s;
}
public static boolean specialChar(int car){
char character[] ={'+','-','*','/','%',';',',','{','}','(',')','=','<','>',':'};
for(int i = 0;i < character.length;i++){
if(car == character[i])
return true;
}
return false;
}
但是問題是代碼沒有忽略'\\ n'並顯示:
[程序] [TeTruena] [是]
為什么是這樣??
當輸入文件使用Unix字符返回(\\ n)時,您的代碼將按預期工作。
我懷疑您使用的是Windows輸入,因此請調整以下行:
while ((car != -1) && (car != ' ') && (car != '\n') && (!specialChar(car))) {
對此:
while ((car != -1) && (car != ' ') && (car != '\n') && (car != '\r') && (!specialChar(car))) {
而且會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.