我想要做的是读取一个.java文件,并挑选出所有标识符并将它们存储在列表中。我的问题是.split()方法。如果按原样运行此代码,则将获得ArrayOutOfBounds,但是如果将分隔符从“”更改为。对于其他任何事情,该代码都有效。但是我需要用“。”解析的行。所以还有另一种方法可以做到这一点吗?import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.*;public class MyHash { private static String[] reserved = new String[100]; private static List list = new LinkedList(); private static List list2 = new LinkedList(); public static void main (String args[]){ Hashtable hashtable = new Hashtable(997); makeReserved(); readFile(); String line; ListIterator itr = list.listIterator(); int listIndex = 0; while (listIndex < list.size()) { if (itr.hasNext()){ line = itr.next().toString(); //PROBLEM IS HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! String[] words = line.split("."); //CHANGE THIS AND IT WILL WORK System.out.println(words[0]); //TESTING TO SEE IF IT WORKED } listIndex++; } } public static void readFile() { String text; String[] words; BufferedReader in = null; try { in = new BufferedReader(new FileReader("MyHash.java")); //NAME OF INPUT FILE } catch (FileNotFoundException ex) { Logger.getLogger(MyHash.class.getName()).log(Level.SEVERE, null, ex); } try { while ((text = in.readLine()) != null){ text = text.trim(); words = text.split("\\s+"); for (int i = 0; i < words.length; i++){ list.add(words[i]); } for (int j = 0; j < reserved.length; j++){ if (list.contains(reserved[j])){ list.remove(reserved[j]); } } } } }}
3 回答

慕神8447489
TA贡献1780条经验 获得超1个赞
使用字符串文字定界符进行拆分时,最安全的方法是使用Pattern.quote()方法:
String[] words = line.split(Pattern.quote("."));
如其他答案所述,与分割"\\."是正确的,但quote()这样做会为您逃避。

慕码人2483693
TA贡献1860条经验 获得超9个赞
split的参数是一个正则表达式。句点是匹配任何内容的正则表达式元字符,因此,其中的每个字符都line
被视为分割字符,并被丢弃,并且它们之间的所有空字符串也被丢弃(因为它们是空字符串)。结果是您一无所有。
如果您对句点进行转义(通过在其前添加转义的反斜杠),则可以匹配文字周期。(line.split("\\.")
)
添加回答
举报
0/150
提交
取消