string split特殊字元 - Java中的split()方法不適用於點(。)




\\ android (7)

這個問題在這裡已經有了答案:

我準備了一個簡單的代碼片段,以便將錯誤的部分從我的Web應用程序中分離出來。

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.print("\nEnter a string:->");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();

        String words[] = temp.split(".");

        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i] + "\n");
        }
    }
}

我在構建Web應用程序JSF時測試了它。 我只想知道為什麼在上面的代碼temp.split(".")不起作用。 該聲明,

System.out.println(words[i]+"\n"); 

在控制台上什麼都不顯示意味著它不通過循環。 當我將temp.split()方法的參數更改為其他字符時,它和往常一樣正常工作。 可能是什麼問題?


Answers

\\. 是簡單的答案。 這裡是你的幫助的簡單代碼。

while (line != null) {
    //             
    String[] words = line.split("\\.");
    wr = "";
    mean = "";
    if (words.length > 2) {
        wr = words[0] + words[1];
        mean = words[2];

    } else {
        wr = words[0];
        mean = words[1];
    }
}

嘗試:

String words[]=temp.split("\\.");

該方法是:

String[] split(String regex) 

“。” 是正則表達式中的保留字符


該方法採用正則表達式,而不是字符串,並且該點在正則表達式中具有特殊含義。 像split("\\.")一樣逃脫它split("\\.") 。 你需要一個雙反斜杠,第二個逃避第一個。



    private String temp = "mahesh.hiren.darshan";

    String s_temp[] = temp.split("[.]");

  Log.e("1", ""+s_temp[0]);

它工作正常。 您是否閱讀java.lang.String.split ? 該字符串被轉換為正則表達式。

. 是匹配所有輸入字符的特殊字符。

與任何正則表達式特殊字符一樣,您使用\轉義。 您需要額外的\用於Java字符串轉義。


我覺得有趣的是沒有人使用內部類的例子。如果你有內部課程; 它本身就維護了對包含類的引用。當然,從技術上講,它不是內存洩漏,因為Java最終會將其清理乾淨; 但這可能會導致課程比預期更長時間。

public class Example1 {
  public Example2 getNewExample2() {
    return this.new Example2();
  }
  public class Example2 {
    public Example2() {}
  }
}

現在,如果您調用Example1並獲取Example2丟棄Example1,您將固有地仍然擁有指向Example1對象的鏈接。

public class Referencer {
  public static Example2 GetAnExample2() {
    Example1 ex = new Example1();
    return ex.getNewExample2();
  }

  public static void main(String[] args) {
    Example2 ex = Referencer.GetAnExample2();
    // As long as ex is reachable; Example1 will always remain in memory.
  }
}

我也聽說過一個謠言,如果你的變量存在的時間超過特定的時間; Java假設它將永遠存在,並且如果再也無法在代碼中訪問它,它實際上永遠不會嘗試清理它。但這完全未經證實。





java string split