【问题标题】:Java parse String into java ObjectJava 将 String 解析为 java Object
【发布时间】:2020-02-26 04:17:17
【问题描述】:

我如何解析这样的字符串:

String m = "Material: chair\nPrice: 302.91\nCount: 5"

进入一个java对象:

public class Order {
    String material;
    String price;
    int count;
}

【问题讨论】:

  • 欢迎来到 Stackoverflow,请阅读How To Ask。特别关注How To Create MCVE。确保使用适当的标签(编程语言、相关技术等)标记您的问题。您在发布一个好问题上付出的努力越多:一个易于阅读、理解并且是 on topic 的问题 - 它吸引相关人员的机会就越高,您将更快地获得帮助。祝你好运!
  • 您的意思是左侧的值,例如 Material 应该被自动考虑并声明为变量名和右侧的值以确定它是什么类型并分配给合适的类型?
  • 最简单的解决方案不是发明自己的序列化格式,而是使用现有的序列化格式,如 JSON。所以问题是:你为什么要自己创建这样的机制而不是使用already existing tools
  • 不,我的意思是,如何将值“chair”、“302.91”和 5 解析为单个变量。
  • @Pshemo 我知道这样会更容易,但我的任务是这样做......

标签: java string parsing object


【解决方案1】:

只需创建一个类:

class Material{
    String material;
    String price;
    int count;
    public Material(String material, String price, int count){
         this.material = material;
         this.price = price;
         this.count = count;
    }
    // Override toString()? Comparable (compareTo())? 
}
class Foo{
    public static void main (String[] args){
         String S = "Wood 50 10";
         Material m = new Material();
         //m is now an object
         // You want to parse a string into an object. One way is java.util.Scanner
         // with methods like Scanner.nextInt() and Scanner.next();
         java.util.Scanner sc = new java.util.Scanner(S);
         m = new Material(sc.next(), sc.next(), sc.nextInt());

         String[] values = S.split(" "); // Split the string into and copy to an array
         m = new Material(values[0], values[1], Integer.parseInt(values[2]));
    }
}

【讨论】:

  • 问题的“解析字符串”部分怎么样,这似乎是实际问题?
  • @another-dave 已修复
【解决方案2】:

一个非常简单的解决方案是:

public class Main {
    public static void main(String[] args) {
        String m = "Material: chair\nPrice: 302.91\nCount: 5";
        Order order = new Order(m);
        System.out.println(order.count);
        System.out.println(order.material);
        System.out.println(order.price);
    }
}


class Order {
    String material;
    String price;
    int count;
    public Order(String str){
        String[] parsedArr = str.split("\n");
        String materialStr = parsedArr[0];
        String priceStr = parsedArr[1];
        String countStr = parsedArr[2];
        this.material = materialStr.split(":")[1].trim();
        this.price = priceStr.split(":")[1].trim();
        this.count = Integer.parseInt(countStr.split(":")[1].trim());
    }
}

就像其他答案一样。我建议使用 JSON 而不是这种随机字符串。

【讨论】:

  • 这正是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2013-06-16
  • 2022-01-17
  • 2012-06-24
  • 1970-01-01
相关资源
最近更新 更多