2012-06-29 4 views
0

У меня есть String, который представляет собой значение времени и сохраняется в следующем формате:Java: замена символов в строке

1:31:25 

Я хотел бы заменить двоеточие и изменить формат:

1h 31m 25s 

Какая функция на Java позволит мне заменить первые два двоеточия на 'h ' и 'm ', а конец строки - 's'.

ответ

2
String time = "1:31:25"; 
String formattedTime = time.replaceFirst(":","h ").replaceFirst(":","m ").concat("s"); 
+0

Я люблю свою версию с CONCAT;) –

+0

Да, не так часто неправомерно пренебречь? –

+0

, который напоминает мне: правда ли, что '.concat (zero_length_string_variable)' быстрее, чем '+ zero_length_string_variable' или +, также является« умным »в последних виртуальных машинах? –

2

Повторное использование метода String.replaceFirst() поможет вам здесь.

Просто замените ваш первый «:» с «ч», а затем применить снова «т» и т.д.

Есть дополнительные опции, которые могут быть более подходящими/надежными и т.д. в зависимости от обстоятельств.

Regular expressions может быть полезен здесь, чтобы помочь вам разобрать или разбить такую ​​строку.

Или, учитывая, что вы анализируете/выводите время, также стоит обратить внимание на SimpleDateFormat и его способность разбора/вывода комбинаций даты и времени.

Фактически, если вы храните эту дату в виде строки, вы можете захотеть подтвердить это решение. Хранение его как объекта даты (любого варианта) является более типичным, защитит вас от недопустимых значений и позволит вам выполнять арифметику и т. Д.

2
String input = "1:31:25"; 
String[] tokens = input.split(":"); 
String output = tokens[0] + "h " + tokens[1] + "m " + tokens[2] + "s"; 
1

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

String input = "1:31:25"; 
    String expr = "(\\d+):(\\d+):(\\d+)"; 
    String substitute = "$1h $2m $3s"; 
    String output = input.replaceAll(expr, substitute); 

Альтернативой разобрать и вывести строку через Дата:

DateFormat parseFmt = new SimpleDateFormat("HH:mm:ss"); 
    DateFormat displayFmt = new SimpleDateFormat("H'h' mm\'m' ss's'"); 
    Date d = parseFmt.parse(input); 
    output = displayFmt.format(d); 
+0

Почему вы используете '[\\ d]' вместо просто '\ d'? – dacwe

+0

Просто привычка и быстрый ответ от огня;) В этом случае нет необходимости в '[]'. – sudocode

+0

Хорошо, +1 для обновления и даты! – dacwe

8

Вы могли бы сделать что-то вроде это:

String[] s = myString.split(":"); 
String.format("%sh %sm %ss", s); 

Или даже компактный!

String.format("%sh %sm %ss", myString.split(":")); 
+0

Я думаю, что это аккуратно – sudocode

+0

Это намного проще .. – UVM

+0

Для большего эффекта я бы встроил 's'. –

0

Использование сплит()

String s = "1:31:25"; 
String[] temp = s.split(":"); 
System.out.println(s[0]+"h"+" "+s[1]+"m"+" "+s[2]+"s"); 
1
String[] timeStr = "1:31:25".split(":"); 
StringBuffer timeStrBuf = new StringBuffer(); 
timeStrBuf.append(timeStr[0]); 
timeStrBuf.append("h "); 
timeStrBuf.append(timeStr[1]); 
timeStrBuf.append("m "); 
timeStrBuf.append(timeStr[2]); 
timeStrBuf.append("s"); 
+0

Я бы предпочел StringBuilder над StringBuffer, просто из-за отсутствия чрезмерной синхронизации. Тем не менее! –

+0

Хорошо, StringBuilder будет лучше. – Sabbath

Смежные вопросы