x.i9j11k2d2" index="604" value="0"/> x.i9j11k2d3" i-6ren">
gpt4 book ai didi

java - 从java中的格式化文本中扫描数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:39 26 4
gpt4 key购买 nike

我有这样的格式化文本:

x.i9j11k2d1" index="603" value="0"/>
x.i9j11k2d2" index="604" value="0"/>
x.i9j11k2d3" index="605" value="0"/>
x.i10j1k1d1" index="606" value="-0"/>

而且,我对仅扫描数字感兴趣。例如:

int i,j,k,d,index,value;

对于我想要的第一行:

i=9, j=11, k=2, d=1, index=603, value=0

为此,我使用了以下代码:

Scanner file=new Scanner(new File("C:/sol.txt"));
while(file.hasNext())
{
System.out.println("");
int i=0;
int j=0;
int k=0;
int d=0;
file.useDelimiter("");
while(!(file.hasNextInt()))
{
System.out.print(file.next());
}
//System.out.print(file.next());
file.useDelimiter("j");
i=file.nextInt();
System.out.print(i);
file.useDelimiter("");

System.out.print(file.next()); //j
file.useDelimiter("k");
j=file.nextInt();
System.out.print(j);
file.useDelimiter("");

System.out.print(file.next()); //k
k=file.nextInt();
System.out.print(k);
System.out.print(file.next()); //d
d=file.nextInt();
System.out.print(d);
while(!(file.hasNextInt()))
{
System.out.print(file.next());
}
file.useDelimiter("\"");
int index=file.nextInt();
System.out.print(index);
file.useDelimiter("");
while(!(file.hasNextInt()))
{
System.out.print(file.next());
}
int value=file.nextInt();
System.out.print(value);
System.out.print(file.nextLine());
}
file.close();
}
catch (FileNotFoundException exc)
{System.out.println("File non trovato");}

i 是一位数字之前,它可以正常工作,但是当我必须扫描第四行时,我不知道为什么它会返回以下内容:

...
//System.out.print(file.next());
file.useDelimiter("j");
i=file.nextInt(); // it returns i=1 instead of 10
System.out.print(i);
file.useDelimiter("");

System.out.print(file.next()); //j --> prints 0 instead of j
file.useDelimiter("k");
j=file.nextInt(); // --> finds j instead of 1 and
// crashes with "InputTypeMismatch"

该文件是 XML 格式的,我无法发布整个文件,因为它有数千行,但如下所示:

    <?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
<CPLEXSolution version="1.2">
<header
problemName="prob"
solutionName="incumbent"
solutionIndex="-1"
objectiveValue="58.2123812523709"
solutionTypeValue="3"
solutionTypeString="primal"
solutionStatusValue="102"
solutionStatusString="integer optimal, tolerance"
solutionMethodString="mip"
primalFeasible="1"
dualFeasible="0"
MIPNodes="3285"
MIPIterations="22164"
writeLevel="1"/>
<variables>
<variable name="x.i0j1k1d1" index="0" value="0"/>
<variable name="x.i0j1k1d2" index="1" value="0"/>
<variable name="x.i0j1k1d3" index="2" value="0"/>
<variable name="x.i0j1k2d1" index="3" value="1"/>
</variables>
</CPLEXSolution>

最佳答案

为了简单起见,请使用正则表达式。使用模式“\d+”,它将提取您可以根据需要使用的所有数字。看看代码。模式 p 匹配下一个数字,Matcher m 将此模式应用于字符串,然后 m.find() 方法提取下一组(带有模式\d 的数字),这里是你的号码。

import java.util.regex.*;

public class test {
public static void main(String[] args) throws Exception {
int i = 0,j,k,d,index,value = 0;
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher("x.i9j11k2d1\" index=\"603\" value=\"010\"/>");
if(m.find()) i=Integer.parseInt(m.group());
if(m.find()) j=Integer.parseInt(m.group());
if(m.find()) k=Integer.parseInt(m.group());
if(m.find()) d=Integer.parseInt(m.group());
if(m.find()) index=Integer.parseInt(m.group());
if(m.find()) value=Integer.parseInt(m.group());

System.out.println("i="+i+" value="+value);
}
}

关于java - 从java中的格式化文本中扫描数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172326/

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