为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中与String.split()一起使用“。”作为分隔符?

如何在Java中与String.split()一起使用“。”作为分隔符?

繁花如伊 2019-09-24 16:27:06
我想要做的是读取一个.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()这样做会为您逃避。


查看完整回答
反对 回复 2019-09-24
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

split的参数是一个正则表达式。句点是匹配任何内容的正则表达式元字符,因此,其中的每个字符都line被视为分割字符,并被丢弃,并且它们之间的所有空字符串也被丢弃(因为它们是空字符串)。结果是您一无所有。

如果您对句点进行转义(通过在其前添加转义的反斜杠),则可以匹配文字周期。(line.split("\\.")


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 896 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信