2013-08-11 3 views
1

я следующий код и в необходимости замены значения на время от PT14H01M00S к 14:01:00 следующий код пропустить первые два полукокса, но я получаю 14H01M00S, нет способ сделать это без использования построителя строк?замените значения в строке

String time = "PT14H01M00S"; 
String substring = time .substring(2); 
substring.replace("H", ":"); 
substring.replace("M", ":"); 
substring.replace("S", ""); 

System.out.println(substring); 
+0

Кажется, вы пытаетесь отформатировать период JodaTime в другом формате. Вы действительно должны использовать форматтер, заданный JodaTime, вместо использования API класса String. См. Мой ответ для правильного способа выполнения этой задачи. –

ответ

5

вы забыли сделать

String time = "PT14H01M00S"; 
String substring = time .substring(2); 
substring = substring.replace("H", ":"); 
substring = substring.replace("M", ":"); 
substring = substring.replace("S", ""); 

System.out.println(substring); 

так substring не получает новое значение, возвращенное из replace метода

управлял его в here и получил

enter image description here

+0

Очень похоже на @Paniz ответ !! –

2

использовать этот код вместо:

String time = "PT14H01M00S"; 
String substring = time .substring(2); 
substring = substring.replace("H", ":"); 
substring = substring.replace("M", ":"); 
substring = substring.replace("S", ""); 
3

Я думаю, что это должно работать

String time = "PT14H01M00S".substring(2, time.length - 1).replace(/H|M/, ":"); 
3

метод replace не изменяет строку она была призвана, она возвращает новую строку.

Так что вы хотите:

String time = "PT14H01M00S"; 
String substring = time .substring(2); 
substring = substring.replace("H", ":"); 
substring = substring.replace("M", ":"); 
substring = substring.replace("S", ""); 
2

Я рекомендую использовать regular expressions делать такого рода задач. Они очень эффективны для поиска и замены шаблонов текста.

2

использовать этот код вместо

String substring = time .substring(2); 
substring = substring.replaceAll("[HM]",":").replace("S", ""); 
5

Вы можете использовать регулярное выражение и заменить

^..(\d\d)H(\d\d)M(\d\d)S$ 

с

$1:$2:$3 

(я оставляю детали кода в качестве упражнения для читатель.)

3

Кажется, вы пытаетесь разобрать и отформатировать JodaTimePeriod. Вы не должны это делать, используя API класса String. Используйте соответствующий форматтер, уже предоставленный в JodaTime API.

Вы должны построить 2 PeriodFormatter с с использованием PeriodFormatterBuilder класса, один для разбора данной строки в Period, а затем второй для форматирования Period в требуемый формат:

String periodString = "PT14H01M00S"; 

PeriodFormatter parser = new PeriodFormatterBuilder() 
     .appendLiteral("PT") 
     .appendHours().appendSuffix("H") 
     .appendMinutes().appendSuffix("M") 
     .appendSeconds().appendSuffix("S") 
     .toFormatter(); 

PeriodFormatter formatter = new PeriodFormatterBuilder() 
     .minimumPrintedDigits(2) 
     .printZeroAlways() 
     .appendHours() 
     .appendSeparator(":") 
     .appendMinutes() 
     .appendSeparator(":") 
     .appendSeconds() 
     .toFormatter(); 

System.out.println(formatter.print(parser.parsePeriod(periodString))); 

Выход:

14:01:00