Строка .replace () не применимо - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь удалить нечисловые символы из моей строки.

Я пытался использовать метод .replace(), но он возвращается с ошибкой:

Метод replace (char, char) в типе String не применим для аргументов (String, String)

Код:

Properties p = new Properties();
File f = new File("coords.txt");
if (f.exists()) {
    FileInputStream in;
    try {
        in = new FileInputStream(f);
        p.load(in);
        in.close();
    } catch (Exception e) {
        System.err.println("Failed to load coordinates");
        System.err.println(e.getMessage());
        Button.waitForAnyPress();
        System.exit(0);
    }
} else {
    System.out.println("No coordinates found");
    while (!Button.ESCAPE.isPressed()) {
        Thread.yield();
    }
    System.exit(0);
}

Когда я распечатываю строку gg, инициализируется как:

String gg = p.toString();

Я получаю вывод: Object020f458.

Мой компьютер выдает ошибку при замене:

gg = gg.replace("{", "");
gg = gg.replace("=", "");
gg = gg.replace("}", "");

int commaLoc = gg.indexOf(",");
int x = Integer.parseInt(gg.substring(0,commaLoc));
int y = Integer.parseInt(gg.substring(commaLoc + 1));

Ответы [ 5 ]

0 голосов
/ 13 февраля 2019

Так как строка, которую я использовал, фактически использовалась, было свойством, я должен был извлечь его как свойство, которое само отформатирует его

 int Count = Integer.parseInt(p.getProperty("Number_of_properties"));
   for(int i = 1; i < Count; i++)
   {
    int x = Integer.parseInt(p.getProperty("x"+i));
    int y = Integer.parseInt(p.getProperty("y"+i));

   }

Мне также пришлось изменить свой текстовый файл, чтобы он соответствовал формату свойства:

Number_of_properties = 4
x1 = 150
y1 = 70
x2 = 55
y2 = 77
0 голосов
/ 10 февраля 2019

проблема:

gg = gg.replace("{", "");
gg = gg.replace("=", "");
gg = gg.replace("}", "");

сообщение об ошибке:

Метод replace (char, char) в типе String не применим для аргументов (String, String)

Пожалуйста, попробуйте заменить на Character.MIN_VALUE:

Заменить " на ', затем заменить все '' (поскольку java "не нравится пустой символлитерал ") с Character.MIN_VALUE):

gg = gg.replace('{', Character.MIN_VALUE);
gg = gg.replace('=', Character.MIN_VALUE);
gg = gg.replace('}', Character.MIN_VALUE);

Character.MIN_VALUE равен не пустой символ, но ближайший к нему :), и преобразует (сString.replcae(char,char) test):

{foo=bar}

to:

\u0000foo\u0000bar\u0000

... который трудно копировать и вставлять, но "выглядит как пробел":)

0 голосов
/ 10 февраля 2019

Итак, я взглянул на NXT и его API ( JavaDocs )
Кстати, я ни в коем случае не эксперт по NXT и leJOS, я думаю.

Вы можете увидеть из JavaDoc, что метод replace(CharSequence, CharSequence) отсутствует.

enter image description here

Хотя я бы не решил проблему в такомКстати, вы можете попробовать использовать StringBuilder для удаления нежелательных символов.

См., например, ответ Джона Скита на идеи https://stackoverflow.com/a/3472705/1392277

Вы можете извлечь такой метод, как:

private String removeChars(
        final String originalString,
        final String charsToRemove) {
    final StringBuilder stringBuilder = new StringBuilder(originalString);
    int i = stringBuilder.indexOf(charsToRemove);

    while (i != -1) {
        stringBuilder.replace(i, i + charsToRemove.length(), "");
        i = stringBuilder.indexOf(charsToRemove, i);
    }

    return stringBuilder.toString();        
}
0 голосов
/ 10 февраля 2019

Ошибка должна быть выделена в двух строчках ниже, а не для функции замены.

   int x = Integer.parseInt(gg.substring(0,commaLoc));
   int y = Integer.parseInt(gg.substring(commaLoc + 1));

Вы забыли поставить запятую во второй строке.Это должно быть

   int y = Integer.parseInt(gg.substring(commaLoc, + 1));

Тем не менее это не будет работать, потому что вы пытаетесь использовать функцию подстроки с недопустимым диапазоном (поскольку значение commaLoc равно -1).

Попробуйте заменить эти две последние строки, как показано ниже.чтобы сделать это без ошибок.

      int x = Integer.parseInt(gg.substring(6, 7));
      int y = Integer.parseInt(gg.substring(7, 8));
0 голосов
/ 10 февраля 2019

Вы можете использовать

public String replaceAll(String regex, String replacement)

Это заменит все соответствующие выражения на замены.

gg = gg.replaceAll("{", ""); // replace all "{" with "".
gg = gg.replaceAll("=", "");
gg = gg.replaceAll("}", "");
...