簡體   English   中英

如何跳過此代碼中的“ \\ n”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM