2014-02-06 2 views
1

Мне нужно изменить строку, уменьшив число на единицу, например. 011 затем 010 и т.д., если 009, то 008.Изменение целого числа в строке в Java

Однако, я не могу думать о пути, чтобы сделать эту вещь, пожалуйста, помогите мне:

<img width="188" height="307" src="File1.files/image006.png" alt="NNMF_Input.png" v:shapes="image_x0020_33" /> 
<img width="506" height="200" src="File1.files/image014.png" v:shapes="image_x0020_1" /> 
<img width="506" height="411" src="File1.files/image016.png" v:shapes="image_x0020_2" /> 
<img width="515" height="179" src="File1.files/image018.png" v:shapes="image_x0020_3" /> 

Здесь я хочу изменить files/image006.png к files/image005.png и изменения говорят files/image010.png - files/image009.png.

P.S. Они все в струнах! не HTML-теги фактически

+2

Один способ: a). Преобразование String в Integer, b). Decrement Integer, c). Преобразуйте обратно в String. –

+0

Да, но дело в том, что я могу это сделать, но проблема в том, что я должен извлечь часть строки, а затем вернуть ее туда, где она была .. и это дело 000, так что это не просто вещь. – user3278450

+0

Используйте 'String # replace' – Maroun

ответ

6

попробовать регулярки

Matcher m = Pattern.compile("(?<=/image)\\d{3}").matcher(str); 
    StringBuffer sb = new StringBuffer(); 
    while(m.find()) { 
     m.appendReplacement(sb, String.format("%03d", Integer.parseInt(m.group()) - 1)); 
    } 
    m.appendTail(sb); 
+0

Привет, я довольно новичок в регулярном выражении. Не могли бы вы рассказать мне, как я могу получить только файл File1.files/image006.png из тега img с помощью Regex? – user3278450

+0

@ user3278450 Вы можете найти основное учебное пособие по Regex здесь: http://www.vogella.com/tutorials/JavaRegularExpressions/article.html – Rakesh

+0

mmm .. Я не знаю, как добавить больше правил с текущим регулярным выражением в компиляции, например ,^"src =" .png "$ (но я хочу их исключить ..пожалуйста, помогите мне!) – user3278450

0
int i = Integer.parseInt("011"); 
System.out.format("%03d", i-1); 
0

Просто для смешно - SCALA решения :)

scala> def increment(str:String) = str.split("[^0-9]"). 
filter(s => s.nonEmpty && s.length >1). 
foldLeft(str)((acc,curr) => acc.replace(curr, {val res = (curr.toInt+1).toString;Range(0,curr.length - res.length). 
foldLeft(res)((acc,curr)=> "0"+acc) })) 
increment: (str: String)String 

scala> increment("File1.files/image014.png") 
res10: String = File1.files/image015.png 
0
String str = "000110"; 

// Get the last index and add 1 to determine number of leading zeros 
int i = str.lastIndexOf('0') + 1; 

// Subtract or do any math on the number you want 
int newNumber = Integer.parseInt(str) - 1; 

// Format the new string with leading zeros 
String newString = String.format("%0" + i + "d", newNumber); 

// See the new string 
System.out.println(newString); 

EDIT

Чтобы ответить отредактированный вопрос :

String str = "image0110"; 

// Get the number (above example 0110) from original string using the last character 'e 'from 'image' 
str = str.substring(str.lastIndexOf('e') + 1); 

// Get how many leading zeros are in there 
int i = str.lastIndexOf('0') + 1; 

// Do the math 
int newNumber = Integer.parseInt(str) - 1; 

// Form the new string starting with 'image' and leading zeros 
String newString = "image" + String.format("%0" + i + "d", newNumber); 

System.out.println(newString); 
Смежные вопросы