gpt4 book ai didi

java - 如何读取jsonArray的Character并将字符存储在ArrayList中?

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:57 24 4
gpt4 key购买 nike

我在 json 文件中有这个 json 字符串

{"Q":[0,1,2,3],"q_0":0,"F":[3],"delta":[[0,1],[0,2],[3,2],[0,1]],"segma":[0,1]}

我想读取segma数组并将其存储为字符数组列表

 static ArrayList<Long> Q;
static ArrayList<Character> segma;
static ArrayList<Long> F;
static Long q_0;
static Long deadStat;
static ArrayList<ArrayList<Integer>> delta;

parseDFAObject 函数

 private static void parseDFAObject(JSONObject dfa) {
//Get employee object within list
Automat.Q = (ArrayList<Long>) dfa.get("Q");
System.out.println(Q);
//Get employee first name
Automat.q_0 = (Long) dfa.get("q_0");
System.out.println(q_0);

Automat.F = (ArrayList<Long>) dfa.get("F");
System.out.println(F);



Automat.delta = (ArrayList) dfa.get("delta");
System.out.println(delta);
JSONArray ja;
ja = (JSONArray)dfa.get("segma");
Character[] ch = (Character[]) ja.toArray();
for(int s=0;s<ch.length;s++){
Automat.segma.add(s,ch[s]);}

System.out.println(segma);
}

checkAccepte 函数

    public static boolean checkAccepte(String s) {
int qs;
qs = q_0.intValue();
int qalpha;
for (int i = 0; i <= s.length(); i++) {
Character c = (char) s.charAt(i);
qalpha = segma.indexOf(c);
qs =Q.indexOf(delta.get(qs).get(qalpha));
}
return false;
}

输入是0110主要功能

  public static void main(String[] args) {

Scanner input =new Scanner(System.in);
//JSON parser object to parse read file
JSONParser jsonParser = new JSONParser();

try (FileReader reader = new FileReader("DFA.json")) {
//Read JSON file
Object obj = jsonParser.parse(reader);

JSONObject DFA1 = (JSONObject) obj;
System.out.println(DFA1);


parseDFAObject(DFA1);

if( checkAccepte(input.next()){
System.out.println("ACCEPTED ^_^");
}
else{
System.out.println("NOT ACCEPTED !!");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}

}

我有这个异常

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Character;
at automat.Automat.parseDFAObject(Automat.java:150)
at automat.Automat.main(Automat.java:111)

我尝试这样做

Automat.segma = (ArrayList<Character>) dfa.get("segma");

而不是parseDFAObject函数中的这段代码

 JSONArray ja;
ja = (JSONArray)dfa.get("segma");
Character[] ch = (Character[]) ja.toArray();
Automat.segma.add(s,ch[s]);

当我在 checkAccepte 函数中使用 java segma.indexOf(c); 时出现此异常,它返回 -1

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:422)
at java.util.ArrayList.get(ArrayList.java:435)
at automat.Automat.checkAccepte(Automat.java:40)
at automat.Automat.main(Automat.java:113)
``

最佳答案

这里:

"segma":[0,1]

ja = (JSONArray)dfa.get("segma");
Character[] ch = (Character[]) ja.toArray();

到底是什么让您认为segma将是一个字符数组?正如现在所写的,它将是一个数字数组。您的 Q 数组具有几乎相同的示例数据,并且您将其视为 List<Long> 。不要指望来自 JSON 解析器的另一个数组具有不同的类型!

如果出于某种原因您想要治疗[0,1]作为字符数组,那么您必须将传入的 Long 列表转换为该表示形式。 JSON 解析器本身不会为您执行此操作!

关于java - 如何读取jsonArray的Character并将字符存储在ArrayList中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com