如何解析包含许多整数的String

时间:2015-05-26 12:59:50

标签: java xml string parsing int

我正在尝试从xml文档中读取一些int:

<aaa>
    <agent>
       <name>Agent 1</name>
       <position>4 5</position>
       <vector>87 78 54 5 -4</vector>
    </agent>
</aaa>

这是我的Java代码:

DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = documentFactory.newDocumentBuilder();
Document document = builder.parse(new File("utility.xml"));

NodeList agents = document.getElementsByTagName("agent");

for(int i=0; i<agents.getLength(); i++) {
        Node node = agents.item(i);

        if(node.getNodeType() == Node.ELEMENT_NODE) {
                Element agente = (Element)node;

                String name = agente.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
                String position = agente.getElementsByTagName("position").item(0).getFirstChild().getNodeValue();
                String vector = agente.getElementsByTagName("vector").item(0).getFirstChild().getNodeValue();

我想将字符串位置解析为2 Integer(4和5),我想将字符串向量解析为5 Integer(并将它们放入数组中)。 我该怎么做?谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

您可以使用Scanner并使用String阅读nextInt的内容:

String stringRead = ...; //imagine you read <position> here
Scanner scanner = new Scanner(stringRead);
List<Integer> intList = new ArrayList<>();
while (scanner.hasNext()) {
    intList.add(scanner.nextInt());
}

如果你使用Java 8,那么你可以通过使用流的力量来缩短它:

String stringRead = ...; //imagine you read <position> here
List<Integer> intList = Arrays.stream(stringRead.split("\\s+"))
    .map(x -> Integer.valueOf(x))
    .collect(Collectors.toList());

答案 1 :(得分:0)

转换为int []

的逻辑
public static void main(String args[]) {
    String position ="87 78 54 5 -4";
    String vector = "4 5";

    String[] posArr = position.split(" ");
    int[] positionArray = new int[posArr.length];

    for(int i = 0 ; i < posArr.length ; i ++) {
        positionArray[i] = Integer.parseInt(posArr[i]);
    }

    String[] vectArr = vector.split(" ");
    int[] vectorArray = new int[vectArr.length];
    for(int i = 0 ; i < vectArr.length ; i ++) {
        vectorArray[i] = Integer.parseInt(vectArr[i]);
    }
}