Застрял в этом маленьком проекте. Не могу понять, как разбить String на несколько строк внутри String [].
Пример:
String exampleString = "one two three four five";
String[] exmplString = {"one", "two", "three", "four", "five"};
Что у меня есть:
static File interfacepath;
FileReader fr;
BufferedReader br;
static String currentLine;
static String[] parseableLine;
Integer lineNumber;
public void readFile(Integer interfaceID) throws IOException {
interfacepath = new File("data/csgui/interface_" + interfaceID
+ ".csgui");
fr = new FileReader(interfacepath.getAbsolutePath());
br = new BufferedReader(fr);
br.read();
getLine(1);
}
public static void getLine(Integer lineNumber) throws IOException {
try (LineNumberReader lnr = new LineNumberReader(new FileReader(
interfacepath))) {
for (String line = null; (line = lnr.readLine()) != null;) {
if (lnr.getLineNumber() == lineNumber) {
currentLine = line;
parseableLine = currentLine.split("\\s+");
System.out.println(parseableLine);
}
System.out.println(currentLine);
}
}
}
Когда я запускаю приложение, он возвращает:
[Ljava.lang.String;@5bcf4b61
testTable Table 1280 720 350 350 1
& Что у меня возникают проблемы:
{testTable, Table, 1280, 720, 350, 350, 1}
testTable Table 1280 720 350 350 1
Если я понимаю ваш вопрос, вы можете использовать String.split(String)
и что-то вроде
public static void main(String[] args) {
String str = "testTable Table 1280 720 350 350 1";
String[] strArr = str.split("\\s+");
System.out.println(Arrays.toString(strArr));
}
Выход
[testTable, Table, 1280, 720, 350, 350, 1]
Поскольку регулярное выражение "\\s+"
соответствует одному или нескольким символам пробела.
редактировать
Основываясь на вашем обновленном коде,
System.out.println(parseableLine);
Должно быть
System.out.println(Arrays.toString(parseableLine));
Вы получаете [Ljava.lang.String;@5bcf4b6
(и нужно Arrays.toString(Object[])
), потому что массивы Java не переопределяют toString()
Ну, все использовали java.lang.String#split()
поэтому я использовал java.util.StringTokenizer
String exampleString = "testTable Table 1280 720 350 350 1";
StringTokenizer stringTokenizer = new StringTokenizer(exampleString," ");
List<String> list = new ArrayList<String>();
while (stringTokenizer.hasMoreTokens()){
list.add(stringTokenizer.nextToken());
}
String str[] = list.toArray(new String[list.size()]);
System.out.println(java.util.Arrays.toString(str));
Конструктор StringTokenizer принимает строку, которая будет маркироваться вместе с разделителями.
StringTokenizer
- это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функцию, рекомендуется использовать вместо этого метод split
String
или пакет java.util.regex
.
.split(..)
- это именно то, что вы ищете, предполагая, что между каждой строкой, которую вы хотите разделить, всегда есть по крайней мере одно пространство.
public static String[] splitBySpace(String s){
return s.split("\\s+");
}
return s.split("\\s");
вместо.
Вам нужно изменить
return new String[] { sb.toString()};
в
return sb.toString().split("\\s");.
Вы sb.toString()
возвращает testTable Table 1280 720 350 350 1
будет разделяться пробелом и возвращаться как массив.