Столкнулась с такой проблемой. Скопирую ниже задание для какого-то понимания кода (лаба в шараге).
Проблема в первом пункте, не приходит в голову как его сделать, убила на это несколько недель, остальное готово.
Что пытаюсь сделать: отдельно записать все до числа, число и после числа, увеличить число и собрать снова, но чисел в тексте может быть несколько. не могу продумать как записать начало, чтобы оно потом перезаписывалось, когда зайдем обратно в цикл, чтобы искать следующее число.
myButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if( peremennaya==1) {
String text = input.getText();
int fir=0;
int sec=0;
int n=0;
int numb1 =0;
int numb2 =0;
int sum=0;
String first_word="";
String second_word="";
String full_word="";
String numword="";
// int start=0; индекс первого символа
// в fir и sec записываются последний индекс первого слова и индекс первого символа второго символа
//numb1 и numb2 - индексы начала и конца чилса, которое нужно прибавить на 25
// first_word - переменная, в которую записывается все до числа
// first_word - переменная, в которую записывается все после числа
// numword - перевод числа в строку
// full_word - собираем все 3 переменные в одну
for (int i = 0; i<text.length(); i++) {
if ((text.charAt(i)>='0')&&(text.charAt(i)<='9')) {
if ((text.charAt(i-1)<='0')&&(text.charAt(i-1)>='9')) {
fir=i-1;
numb1=i;
}
if ((text.charAt(i+1)<='0')&&(text.charAt(i+1)>='9')) {
sec=i+1;
numb2=i;
}
}
}
for (int j=numb1;j<=numb2;j++) {
// _______Переписать_____
// sum = Integer.parseInt(""+text.charAt(j))+sum;
if (j<numb2) sum=sum*10;
}
// из одной строки в другую скопировать в другую несколько символов
// после перевод этой строки в число
sum+=25;
for (int j=fir;j<=fir;j++) { //вместо fir - start
first_word=first_word+text.charAt(j);
}
for (int j=sec;j<text.length();j++) {
second_word=second_word+text.charAt(j);
}
numword = Integer.toString(sum);
full_word = first_word+numword+second_word;
output.setText(second_word);
}
Аня, такую задачку проще всего решить с помощью регулярного выражения.
Замените у себя этот участок кода if( peremennaya==1) {...}
на мой и все будет работать:
if( peremennaya==1) {
String text = input.getText();
// "-?\\d+" - регулярное выражение для поиска в тексте положительных и отрицательных чисел
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher(text);
// при увеличении чисел в тексте, текст может удлинятся,
// нужно учитывать это удлинение при замене (например было 8, стало 33)
int shift = 0; // это сдвиг - величина компенсации увеличения длины текста
while (m.find()) { // в цикле будут обрабатываться все найденные числа в тексте
int oldLength = text.length(); // измерение длины текста перед заменой
String oldNum = m.group(); // получение числа из текста
String newNum = String.valueOf(Integer.parseInt(oldNum) + 25); // добавление к нему 25
// замена в тексте числа на его измененный вариант с учетом текущего сдвига
text = text.substring(0, m.start() + shift) + newNum + text.substring(m.end() + shift);
// получение новой величины сдвига с учетом изменения длины строки
shift += text.length() - oldLength;
}
output.setText(text);
}
Добавила комментарии, чтобы вам было легче разобраться
Для примера на коленке, можно и проще
public static void main(String[] args) {
String str = "На полке стояло 5 чашек и 3 тарелки";
String[] strings = str.split(" ");
for (int i = 0; i < strings.length; i++) {
if (strings[i].matches("\\d+")) { // полность цифра
try {
long number = Long.parseLong(strings[i]);
strings[i] = Long.toString(number + 25);
} catch (NumberFormatException e) {
// logging
}
} else if (strings[i].matches("\\d+\\D+")) { // может быть со знаками припинания в конце, например точка
int index = strings[i].length() - 1;
while (true) {
if (Character.isDigit(strings[i].charAt(index))) {
break;
}
index--;
}
try {
String tmp = strings[i].substring(0, index + 1);
long number = Long.parseLong(tmp);
strings[i] = "" + (number + 25) + strings[i].substring(index + 1);
} catch (NumberFormatException e) {
// logging
}
} else if (strings[i].matches("\\D+\\d+")) { // может быть со знаком припинания вначале, например кавычка
// TODO
} else if (strings[i].matches("\\D+\\d+\\D+")) { // может быть между знаками припинания, в кавычках и точкой в конце
// TODO можно 3 условия соединить в один "\\D*\\d+\\D*"
}
}
String encrypted = String.join(" ", strings);
System.out.println(encrypted);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня установлена аннотация над объектами типа dto, такая же как и над объектами типа EntityНад сущностями аннотация срабатывает, а над объектами...