我需要解析一个包含格式为此示例的整数的文件(用于对DPLL算法进行基准测试):
-486 535 0
-563 745 0
125 -430 512 -4 512 -4 0
512 -4 0
667 -19 0
40 -281 512 -4 0
-231 637 0
通常,数据的格式如此
number number number 0
numbers are separated by space and each line ends with the character 0,
例如这可能是我要解析的字符串
545 -565 7 55 0
我想捕获每个数字。
和0用于分隔这些数字
任何人都可以使用java给我正则表达式吗?
我使用的代码是:
Pattern pattern = Pattern.compile("(\\-?\\d*)\\s*(\\-?\\d*)\\s*(\\-?\\d*)\\s*0");
Matcher matcher = pattern.matcher(sCurrentLine);
//System.out.print("hou find one");
if (matcher.find()) {
int id;
boolean val;
int i=1;
Clause tempClause = new Clause(counter);
do
{
id = Integer.parseInt(matcher.group(i));
val = id>0;
if (val == false)id*=-1;
tempClause.addLiteral(new Literal (id,val));
System.out.print("id "+id+" the current i:"+i+".\n");
i++;
}
while (i<3);
this.clauses.add(tempClause);
counter++;
System.out.print("the i:"+i+"\n");
}
使用此代码我捕获3个整数,我需要改进以捕获该字符串中的所有整数。
答案 0 :(得分:3)
您可以使用Scanner
:
public static void main(String[] arguments) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("data.txt"));
List<Integer> integers = new ArrayList<Integer>();
while (scanner.hasNext()) {
int i = scanner.nextInt();
if (i != 0)
integers.add(i);
}
System.out.println(integers);
}
<强> data.txt中强>
-486 535 0
-563 745 0
125 -430 512 -4 512 -40
512 -4 0
667 -19 0
40 -281 512 -4 0
-231 637 0
<强>输出强>
[-486, 535, -563, 745, 125, -430, 512, -4, 512, -40, 512, -4, 667, -19, 40, -281, 512, -4, -231, 637]
答案 1 :(得分:2)
为满足要求而运行的测试
import org.junit.Test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class testRegex {
@Test
public void testIntRegex() {
Pattern intsOnly = Pattern.compile("(-?\\d+)");
String example = "545 -565 7 55 0";
Matcher matcher = intsOnly.matcher(example);
while (matcher.find()) {
System.out.println(matcher.group() + " -- ");
}
}
}
答案 2 :(得分:0)
这可能相当简单。
循环匹配此正则表达式的文件。
每次取出捕获组1的内容和
在空格上拆分(使用"\\s+"
)
# "(?s)\\s*(.+?)\\s+0\\b"
(?s)
\s*
( .+? ) # (1)
\s+ 0 \b
输出:
** Grp 0 - ( pos 0 , len 10 )
-486 535 0
** Grp 1 - ( pos 0 , len 8 )
-486 535
----------------
** Grp 0 - ( pos 10 , len 12 )
-563 745 0
** Grp 1 - ( pos 12 , len 8 )
-563 745
----------------
** Grp 0 - ( pos 22 , len 35 )
125 -430 512 -4 512 -40
512 -4 0
** Grp 1 - ( pos 24 , len 31 )
125 -430 512 -4 512 -40
512 -4
----------------
** Grp 0 - ( pos 57 , len 11 )
667 -19 0
** Grp 1 - ( pos 59 , len 7 )
667 -19
----------------
** Grp 0 - ( pos 68 , len 18 )
40 -281 512 -4 0
** Grp 1 - ( pos 70 , len 14 )
40 -281 512 -4
----------------
** Grp 0 - ( pos 86 , len 12 )
-231 637 0
** Grp 1 - ( pos 88 , len 8 )
-231 637