簡體   English   中英

給定有效字符串的某些限制,在Java中分解文本文件的最佳方法是什么?

[英]What is the best way to break up a text file in java given certain limitations on what a valid string is?

我一直在閱讀有關使用定界符和模式的許多問題和答案,但仍然很難解決這個問題。我想閱讀一個文本文件,它可能會或可能不會混雜在一起,並從中選擇單詞。 所以用這樣的輸入

"the.dog,jumped over the hole@bob's house"

這會給我以下話

[the, dog, jumped, over, the, hole, bob's, house]

然后,我會為每個單詞做點什么。

Scanner s1 = new Scanner(fileName);
while(s1.hasNext()){
temp = s1.next(String pattern = "no clue");
    //do something with temp
}

我覺得模式是執行此操作的最佳方法,但是我如何制作一個包含任何變化字符的模式,只要它以字母開頭並在到達這些字符中的任何一個時結束? . , * % " ( ) & $ ? < > ! - : ; @ # . , * % " ( ) & $ ? < > ! - : ; @ #或任何類型的white space

我知道我可以通過非常糟糕的運行時效率來做到這一點。 任何幫助將不勝感激,或轉向另一個問題,也許是我沒有找到幫助。

類似於以下內容的東西應該起作用:

Scanner s1 = new Scanner(fileName).useDelimiter("[^\\p{L}']+");
while(s1.hasNext()) {
    String temp = s1.next();
    System.out.println(temp);
}

我認為您所需要的只是在功能scanner.useDelimiter指定所有定界符,這是一個示例,它按照您指定的方式分割測試語句(使用. , @ space作為定界符)。 您可以根據需要在模式表達式中添加更多定界符。

Scanner scanner = new Scanner("the.dog,jumped over the hole@bob's house");
scanner.useDelimiter("\\.|\\,|\\@|\\s");

while (scanner.hasNext()) {
    String temp = scanner.next();
    System.out.println(temp);
}

如果要忽略重復的定界符,例如“ the .... dog ,,, jumped”,則可以使用以下模式作為定界符scanner.useDelimiter("\\\\.+|\\\\,+|\\\\@+|\\\\s+"); ,僅在定界符后加上+

您可以在掃描儀上設置定界符,這樣就可以為您完成這項工作。

Scanner s = new Scanner("the.dog,jumped over. the hole@bob's house.in land");
String pattern = "\\s|\\.|,|@" ;
s.useDelimiter(pattern);
while(s.hasNext()){
  String temp = s.next();
  //do something with temp
}

您可以在模式字符串中添加所有定界符。 您應該轉義(使用\\\\)在正則表達式中具有特殊含義的字符,例如。(。),有關該字符的詳細列表,請參考此鏈接

把事情簡單化:

String[] a = "the.dog,jumped over. the hole@bob's house.in land".split("\\s|\\.|,|@");
for(int i=0; i< a.length;i++){
 String temp = a[i];
  //do something with temp
}

split()接受正則表達式...使用它...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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