Как преобразовать string = "\ t" в char - PullRequest
4 голосов
/ 05 мая 2011

Я работаю для настольного Java-приложения, которое анализирует журналы и загружает их на сервер.Мы просим пользователя предоставить разделитель, с помощью которого мы анализируем файл CSV, и мы читаем предоставленный разделитель из текстового поля в строке и создаем символ как -

separator = (sTerminatedBy != null && !sTerminatedBy.equalsIgnoreCase("")) ? sTerminatedBy.charAt(0) : ' ';

, потому что мой код синтаксического анализатора принимает разделитель вголец.

Проблема в том, что когда пользователь предоставляет "\ t", то как я могу предоставить разделитель в char для моего анализатора.Пользователь может запросить синтаксический анализ любым разделителем, поэтому любой орган может предложить, что я могу сделать для генерирования моего кода, и может предоставить разделитель в символе.

Ответы [ 5 ]

4 голосов
/ 05 мая 2011

Не можете ли вы использовать это?

char tab = '\t';

Если это пользовательский ввод, тогда реальной строкой будет "\\ t", поэтому вам придется прибегнуть к использованию if

if( sTerminatedBy.equals("\\t"))
    seperator = '\t';
1 голос
/ 05 мая 2011
if ("\\t".equals(sTerminatedBy)) {
  separator = '\t';
} else if (null == sTerminatedBy || "".equals(sTerminatedBy)) {
  separator = ' ';
} else {
  separator = sTerminatedBy.charAt(0);
}
0 голосов
/ 21 января 2016

Вот поздний ответ / обходной вариант для того же (или аналогичного вопроса). Я столкнулся с подобной проблемой в случае Java UDF (пользовательская функция) для свиньи. UDF имеет ограничение на прием только строковых аргументов. Что, кроме моего парсера позже, требуется char для определения разделителя. Я не хотел жестко кодировать разделитель, поэтому столкнулся с проблемой преобразования символов в строку. Итак, вот моя работа. Я в качестве аргумента использовал десятичное представление управляющего символа. Так, например для TAB ('\ t') я использовал число 9. Затем я преобразовал свою строку arg ("9") ro int и преобразовал int в char.

int tab = Integer.parseInt(args[1]);
char ch = (char) tab;
System.out.println("[" + ch + "]"); 

Выход для «9»:

[   ]

Не самое удачное решение, но вам не нужно кодировать все возможные управляющие символы в своем коде. Но нужно знать, что вызывающая сторона использует правильное decumal представление символа ctrl.

0 голосов
/ 05 мая 2011

Рассмотрим:

Строка что-то = "Это \ тис \ TTAB \ tseparated";

Рекомендуемый подход:

// Can be also used with files and streams
Scanner sc = new Scanner(something);
sc.useDelimiter("\t");

while (sc.hasNext()) {
   System.out.println(sc.next());
}
sc.close();

А для небольших входов:

String[] separated = something.split("\t");
for (String string : separated) {
   System.out.println(string);
}

Приветствия

0 голосов
/ 05 мая 2011

Это верное выражение:

"\t".charAt(0) == '\t'
...