2015-01-24 5 views
0

다음을 가지고 있다고 가정하면 String example = "12 8 133 | 7 4 2";입니다. 두 개의 동일한 크기의 배열로 바꾸고 싶습니다. 나중에 각각의 정수를 꺼내려고합니다.split을 사용하여 왜 여기에 별도의 배열 크기가 생깁니 까?

먼저 String[] x = example.split("\\|"); 및 그

String[] y = x[0].split("\\D");

String[] z = x[1].split("\\D");

이 이유는, Z는 Y보다 한 사이즈 큰인가?

일반적으로 위와 같은 문자열을 사용하려면 구분 기호를 사용하고 정수를 목록 또는 동일한 크기의 배열에 추가하는 것이 좋습니다.

+1

배열에 무엇입니까? 배열을 실제로 보면 크기가 다른 이유가 분명해야합니다. – immibis

+0

z 사이의 간격 때문에 z가 더 큽니다. @ – Andie2302

+0

@immibis 공백 문자가 배열에 있습니다. 나는 그것을 이해하지만 그것이 왜 포함되어 있는지 이해하지 못한다. Enissay가 제안한대로 이미 "\\ s +"를 사용해 보았습니다. – Legato

답변

4

\\D으로 "숫자가 아님"으로 나누고 있습니다. 그러나 7 앞에있는 공백은 구분 기호를 나타내며 앞에 빈 문자열이 있습니다. 따라서 z의 길이는 4입니다.

그러나 133 뒤에 공백이 있습니다. 왜 그 뒤에 빈 문자열이 없으므로 y도 길이가 4입니까? no-arg split method은 후행 빈 문자열을 없애고 빈 문자열을 선행하지 않으므로

시작 빈 문자열을 제거하려면 분할하기 전에 x에서 요소에 trim()을 호출하십시오.

String[] y = x[0].trim().split("\\D"); 
String[] z = x[1].trim().split("\\D"); 

또한 패턴 "\\D+"을 사용할 수 있습니다, 그래서 행에 하나 이상의 숫자가 아닌 문자를 구분자로 계산합니다.

1

이 시도 :

String example = "12 8 133 | 7 4 2"; 
String[] x = example.split("\\s+\\|\\s+"); 
String[] y = x[0].split("\\s+"); 
String[] z = x[1].split("\\s+"); 
관련 문제