【问题标题】:How to create a Java object from a string representation at runtime如何在运行时从字符串表示创建 Java 对象
【发布时间】:2015-01-26 18:52:49
【问题描述】:

例如,如果我有一个字符串 "{1,2,3,4,5}",我想从该字符串中获取一个 int[] 对象。

我看过 Janino 和 Beanshell,但似乎找不到正确的方法让他们为我做这件事。

我正在寻找一种通用的解决方案,它适用于所有类型 - 不仅是整数数组。

【问题讨论】:

  • 字符串的格式是什么? JSON? toString?
  • 只是一个普通的 Java 字符串,包含“{1,2,3}”、“1”、“Stackoverflow”等。
  • 这是一个不同的 问题,因为现在您要问的是如何将本质上任意的字符串转换为显然是任意的Java 对象。你真正想做什么?
  • 我正在尝试根据用户在字段中键入的内容创建对象。因此,如果用户键入 {1,2,3},我想要一个 int 数组。如果用户键入 Hello,我想要一个字符串。
  • 好的,不要这样...解析很多...没有干净的方法可以这样做...您永远不知道,用户在您的文本字段中输入了什么

标签: java reflection beanshell janino


【解决方案1】:

最好使用Regular Expression。您的String 不一定是Array,它可以是任何包含数字的String

        String s="{1,2,3,4,5}";
        Pattern p = Pattern.compile("-?\\d+");
        Matcher m = p.matcher(s);
        List<Integer> list=new ArrayList<Integer>();
        while (m.find()) {
          Integer num=new Integer(m.group());

          list.add(num);
        }

        System.out.println(list);

输出:

[1, 2, 3, 4, 5]

【讨论】:

  • 没错,但他问的是通用方式,所以这里是
【解决方案2】:

对我来说似乎是一个解析问题。看看字符串方法:)

代码可能如下所示:

String s = "{1,2,3,4,5}"
String justIntegers = s.substring(1, s.length()-1);
LinkedList<Integer> l = new LinkedList();
for (String string: justIntegers.split(','))
l.add(Integer.valuesOf(string));
l.toArray();

如果您使用字符串来发送/保存对象,请使用 xml 或 json...

【讨论】:

  • 感谢您的努力,如果我得到的只是整数数组,那将是可行的。不过我想要一个通用的解决方案。
  • 对于通用解决方案,使用“XStream”它是一个 java-lib 将 java 对象转换为 xml-strings 并返回...每个只需 1 行代码...非常有用
  • 谢谢,我马上试试
  • 您只能读取/转换 xml-Strings...不是普通字符串...它是一种通过 String 或 byte[] 发送/保存 java-objects 的方法
【解决方案3】:

看看https://stackoverflow.com/a/2605050/1458047

答案提出了几个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多