2013-11-10 32 views
0

我使用IntelliJ 12 IDE在java(android)中使用\\|分割以下字符串。Java分割給予阿拉伯字符的相反順序

enter image description here

一切,除了最後一部分罰款,不知何故分割挑選他們以相反的順序:

enter image description here

正如你可以看到真正的定位34,35,36是正確的,並根據該字符串,但當它被挑出split part no 5其錯誤的順序,36,35,34 ...

任何方式,我可以讓他們按正確的順序?

我的代碼:

public ArrayList<Book> getBooksFromDatFile(Context context, String fileName) 
{ 
    ArrayList<Book> books = new ArrayList<Book>(); 

    try 
    { 
     // load csv from assets 
     InputStream is = context.getAssets().open(fileName); 

     try 
     { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

      String line; 
      while ((line = reader.readLine()) != null) 
      { 
       String[] RowData = line.split("\\|"); 
       books.add(new Book(RowData[0], RowData[1], RowData[2], RowData[3], RowData[4], RowData[5])); 
      } 
     } 
     catch (IOException ex) 
     { 
      Log.e(TAG, "Error parsing csv file!"); 
     } 
     finally 
     { 
      try 
      { 
       is.close(); 
      } 
      catch (IOException e) 
      { 
       Log.e(TAG, "Error closing input stream!"); 
      } 
     } 
    } 
    catch (IOException ex) 
    { 
     Log.e(TAG, "Error reading .dat file from assets!"); 
    } 

    return books; 
} 
+1

你確定字符34,35和36的真實位置是正確的嗎?如果該子串應該表示「1到7」,那麼'1'是不是應該位於34位置,'7'應該位於36位置? – VGR

+0

VGR,是的,但記住它的阿拉伯語,所以它的權利從左到右,即使是數字。所以36是第一個用阿拉伯語讀的東西。當我在正常的TextView中顯示它而沒有任何特殊的RTL設置時,我希望它看起來正確。 – sprocket12

+1

從右到左的字符是*從*到左的字符,但在字符串中,它們總是按語言順序排列。字符不應該以相反的順序放置在字符串中,以便從右向左渲染;渲染引擎會照顧到這一點。無論是在左側還是在右側,第一個字符都是'1'。 – VGR

回答

1

在字符串中的字符應始終按語言順序排序,

RightToLeftEmbedding + weakCharacter + PopDirectionalFormatting 

不管他們是否」從右到左或從左到右的字符。所以我們應該看到[34] ='1',[35] =' - ',[36] ='7'。渲染引擎需要使用正確的從右到左或從左到右的佈局來顯示它們。

0

在Unicode的世界裏,有強,弱的字符。這些是弱字符列表:

"\\", "/", "+", "-", "=", ";", "$" 

它們被稱爲「弱」字符,因爲它們不包含任何方向信息。所以由軟件決定這些「弱」字符將放置在哪個方向,more info here。 要解決這個問題,你需要設置Directional Formatting,例如:使用這些常量

char RightToLeftEmbedding = (char)0x202B; 
char PopDirectionalFormatting = (char)0x202C; 
+0

試過這個它沒有工作。 – sprocket12