2012-03-03 145 views
5

任何人都可以提出一个问题,这个问题一直困扰着我?我有一个Java .jar文件返回从由作为方法的字符串如下:在Java中拆分一个字符串

integer integer integer block_of_text 

即三个整数其可以是正的或负的,每个由单个空格隔开,然后另一个空间中的块之前可能包含任何字符但不包含回车符的文字。现在我想我可以读取一个子字符串,直到每个初始整数的空格字符,然后一次只读剩下的文本。

我应该补充说,不管它包含什么,文本块都不会被分解。

但任何人都可以提出一个更好的选择?

感谢受访者。这让我头疼!

+0

block_of_text是否包含换行符?更具体地说,Linux/OS X上的'\ n'或Windows上的'\ r \ n'。我认为是因为你说任何角色都可能存在。 – 2012-03-03 19:46:35

+0

文本块可能包含空格? – sgowd 2012-03-03 19:47:30

+0

回车和换行 - 没有。空间 - 是的。 – 2012-03-03 19:47:52

回答

11

您可以使用String#split(regex,limit) which takes a limit形式:

String s = "123 456 789 The rest of the string"; 
String ss[] = s.split(" ", 4); 
// ss = {"123", "456", "789", "The rest of the string"}; 
+0

我不知道如何使用分割。 – 2012-03-03 19:55:43

7

您可以使用String.split与空间作为分隔符,并设置4个限制:

String[] result = s.split(" ", 4); 

你也可以使用一个Scanner。这不仅会拆分文本,还会将整数解析为int。根据是否需要三个整数作为intString,你可能会发现这更方便:

Scanner scanner = new Scanner(s); 
int value1 = scanner.nextInt(); 
int value2 = scanner.nextInt(); 
int value3 = scanner.nextInt(); 
scanner.skip(" "); 
String text = scanner.nextLine(); 

看到它联机工作:ideone

+0

+1,便于扫描仪使用。 – maerics 2012-03-03 19:57:29

3

一个简单的方法(因为你说在block_of_text中不会有换行符)是使用Scanner。它是基于特定分隔符分解输入的工具,并将适当类型返回给您。例如,您可以使用方法hasNextInt()nextInt()来检查输入中的整数,并实际从流中提取整数。

例如:

Scanner scanner = new Scanner(System.in); // Arg could be a String, another InputStream, etc 
int[] values = new int[3]; 
values[0] = scanner.nextInt(); 
values[1] = scanner.nextInt(); 
... 
String description = scanner.nextLine(); 

你可以使用这个,直到你筋疲力尽的输入流,并开始,因为你需要使用的值。

下面是关于如何使用Scanner更多细节:If ... is not an int {

0

最简单的方式来分割字符串是使用split方法。

String gen = "some texts here"; 
String spt[] = gen.split(" "); //This will split the string gen around the spaces and stores them into the given string array 


要根据你的提问删除整数,开始从3
数组索引我希望这会有所帮助。