我该如何使用“。”作为java中String.split()的分隔符 [英] How can I use "." as the delimiter with String.split() in java

查看:92
本文介绍了我该如何使用“。”作为java中String.split()的分隔符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要做的是读取.java文件,挑出所有标识符并将它们存储在列表中。我的问题是.split()方法。如果按原样运行此代码,您将获得ArrayOutOfBounds,但是如果您从。更改分隔符。其他任何东西,代码都有效。但我需要用。解析的行。那么我有另一种方法可以实现这个目标吗?

What I am trying to do is read a .java file, and pick out all of the identifiers and store them in a list. My problem is with the .split() method. If you run this code the way it is, you will get ArrayOutOfBounds, but if you change the delimiter from "." to anything else, the code works. But I need to lines parsed by "." so is there another way I could accomplish this?

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]);
                    }
                }


            }

        } catch (IOException ex) {
            Logger.getLogger(MyHash.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            in.close();
        } catch (IOException ex) {
            Logger.getLogger(MyHash.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static int keyIt (int x) {
        int key = x % 997;
        return key;
    }

    public static int horner (String word){
        int length = word.length();
        char[] letters = new char[length];

        for (int i = 0; i < length; i++){
            letters[i]=word.charAt(i);
        }

        char[] alphabet = new char[26];
        String abc = "abcdefghijklmnopqrstuvwxyz";

        for (int i = 0; i < 26; i++){
            alphabet[i]=abc.charAt(i);
        }

        int[] numbers = new int[length];
        int place = 0;
        for (int i = 0; i < length; i++){
            for (int j = 0; j < 26; j++){
                if (alphabet[j]==letters[i]){
                    numbers[place]=j+1;
                    place++;

                }
            }
        }

        int hornered = numbers[0] * 32;

        for (int i = 1; i < numbers.length; i++){

            hornered += numbers[i];
            if (i == numbers.length -1){
                return hornered;
            }
            hornered = hornered % 997;
            hornered *= 32;
        }
        return hornered;
    }

    public static String[] makeReserved (){
        reserved[0] = "abstract";
        reserved[1] = "assert";
        reserved[2] = "boolean";
        reserved[3] = "break";
        reserved[4] = "byte";
        reserved[5] = "case";
        reserved[6] = "catch";
        reserved[7] = "char";
        reserved[8] = "class";
        reserved[9] = "const";
        reserved[10] = "continue";
        reserved[11] = "default";
        reserved[12] = "do";
        reserved[13] = "double";
        reserved[14] = "else";
        reserved[15] = "enum";
        reserved[16] = "extends";
        reserved[17] = "false";
        reserved[18] = "final";
        reserved[19] = "finally";
        reserved[20] = "float";
        reserved[21] = "for";
        reserved[22] = "goto";
        reserved[23] = "if";
        reserved[24] = "implements";
        reserved[25] = "import";
        reserved[26] = "instanceof";
        reserved[27] = "int";
        reserved[28] = "interface";
        reserved[29] = "long";
        reserved[30] = "native";
        reserved[31] = "new";
        reserved[32] = "null";
        reserved[33] = "package";
        reserved[34] = "private";
        reserved[35] = "protected";
        reserved[36] = "public";
        reserved[37] = "return";
        reserved[38] = "short";
        reserved[39] = "static";
        reserved[40] = "strictfp";
        reserved[41] = "super";
        reserved[42] = "switch";
        reserved[43] = "synchronize";
        reserved[44] = "this";
        reserved[45] = "throw";
        reserved[46] = "throws";
        reserved[47] = "trasient";
        reserved[48] = "true";
        reserved[49] = "try";
        reserved[50] = "void";
        reserved[51] = "volatile";
        reserved[52] = "while";
        reserved[53] = "=";
        reserved[54] = "==";
        reserved[55] = "!=";
        reserved[56] = "+";
        reserved[57] = "-";
        reserved[58] = "*";
        reserved[59] = "/";
        reserved[60] = "{";
        reserved[61] = "}";

        return reserved;
    }
}


推荐答案

< a href =http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29 =noreferrer> String.split 采用正则表达式,'。'对正则表达式有特殊含义。

String.split takes a regex, and '.' has a special meaning for regexes.

你(可能)想要这样的东西:

You (probably) want something like:

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

有些人似乎无法使其工作,所以这里有一些可以使用的可运行代码验证正确的行为。

Some folks seem to be having trouble getting this to work, so here is some runnable code you can use to verify correct behaviour.

import java.util.Arrays;

public class TestSplit {
  public static void main(String[] args) {
    String line = "aa.bb.cc.dd";
    String[] words = line.split("\\.");
    System.out.println(Arrays.toString(words));
    // Output is "[aa, bb, cc, dd]"
  }
}

这篇关于我该如何使用“。”作为java中String.split()的分隔符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆