преобразовать строку в несколько строк

1

Застрял в этом маленьком проекте. Не могу понять, как разбить 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

4 ответа

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()

  • 0
    не совсем работает, я обновил основной поток.
1

Ну, все использовали 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 принимает строку, которая будет маркироваться вместе с разделителями.

  • 0
    От javadoc : StringTokenizer - это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функцию, рекомендуется использовать вместо этого метод split String или пакет java.util.regex .
  • 0
    да, я согласен с вами только что попробовал по-другому, вот и все
1

.split(..) - это именно то, что вы ищете, предполагая, что между каждой строкой, которую вы хотите разделить, всегда есть по крайней мере одно пространство.

public static String[] splitBySpace(String s){
    return s.split("\\s+");
}
  • 3
    Используйте return s.split("\\s"); вместо.
0

Вам нужно изменить

return new String[] { sb.toString()};

в

return sb.toString().split("\\s");.

Вы sb.toString() возвращает testTable Table 1280 720 350 350 1 будет разделяться пробелом и возвращаться как массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню