2013-10-04 2 views
2

Предположим, что предложение на английском языке:Получить дату, время и Integer значение из предложения Java

String s = "Your Last Login was 2013/10/04 13:06:45 (0 Days, 0 Hours, 0 Minutes)";

И предложение в китайский:

String s = "您上次登录是 2013/10/04 13:06:45( 0 天, 0 小时 0 分钟 )";

меня попробовать

String[] words = s.split("\\s+"); 
    for (int i = 0; i < words.length; i++) { 
    System.out.println(words[i]); 
    } 

И я получаю предложение от Франции

13:10:47,829 INFO [STDOUT] Your 
13:10:47,829 INFO [STDOUT] Last 
13:10:47,829 INFO [STDOUT] Login 
13:10:47,829 INFO [STDOUT] was 
13:10:47,829 INFO [STDOUT] 2013/10/04 
13:10:47,829 INFO [STDOUT] 13:06:45 
13:10:47,829 INFO [STDOUT] (
13:10:47,829 INFO [STDOUT] 0 
13:10:47,829 INFO [STDOUT] Days, 
13:10:47,829 INFO [STDOUT] 0 
13:10:47,829 INFO [STDOUT] Hours, 
13:10:47,829 INFO [STDOUT] 0 
13:10:47,829 INFO [STDOUT] Minutes 
13:10:47,829 INFO [STDOUT]) 

И для китайского предложения:

13:11:49,712 INFO [STDOUT] 您上次登录是 
13:11:49,712 INFO [STDOUT] 2013/10/04 
13:11:49,712 INFO [STDOUT] 13:07:15( 
13:11:49,712 INFO [STDOUT] 0 
13:11:49,712 INFO [STDOUT] 天, 
13:11:49,712 INFO [STDOUT] 0 
13:11:49,712 INFO [STDOUT] 小时 
13:11:49,712 INFO [STDOUT] 4 
13:11:49,712 INFO [STDOUT] 分钟 
13:11:49,712 INFO [STDOUT] ) 

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

+0

на дату и время, вы можете использовать регулярное выражение шаблон дддд/дд/дд & дд: дд: дд – Pranalee

+0

вы возражаете показать мне пример caode для меня – cchua

+0

Ваш код работает для меня и дает мне делать вывода (каждое слово на отдельной строке): 您 上次 登录 是 2013/10/0 13:06:45 (天, 小时 分钟 ) –

ответ

4
public static void main(String[] args) { 
    String english = "Your Last Login was 2013/10/04 13:06:45 (0 Days, 0 Hours, 0 Minutes)"; 
    String chinese = "您上次登录是 2013/10/04 13:06:45( 0 天, 0 小时 0 分钟 )"; 

    String datePattern = "\\d\\d\\d\\d/\\d\\d/\\d\\d"; 
    String timePattern = "\\d\\d:\\d\\d:\\d\\d"; 

    System.out.println(getMatch(english, datePattern)); 
    System.out.println(getMatch(english, timePattern)); 
    System.out.println(getMatch(english, "\\d Days")); 
    System.out.println(getMatch(english, "\\d Hours")); 
    System.out.println(getMatch(english, "\\d Minutes")); 
    System.out.println(); 
    System.out.println(getMatch(chinese, datePattern)); 
    System.out.println(getMatch(chinese, timePattern)); 
    System.out.println(getMatch(chinese, "\\d 天")); 
    System.out.println(getMatch(chinese, "\\d 小时")); 
    System.out.println(getMatch(chinese, "\\d 分钟")); 
} 

private static String getMatch(String input, String regex) { 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(input); 
    if (matcher.find()) { 
     return matcher.group(); 
    } else { 
     return ""; 
    } 
} 
+0

Этот метод работы ...но это будет проблемой, если строка будет изменена на другой язык. – cchua

+0

«Все может быть простым, но не простым» – Pranalee

+0

Я тоже знаю. R.J опубликовал метод почти полностью, но все еще думая о способе получить целочисленное значение за дни, часы и минуты – cchua

0

Здесь вы можете сделать, чтобы узнать дату и время. Вы можете следовать по тем же строкам, чтобы получить значения Integer (хотя я до сих пор не знаю, какие значения Integer вы говорите).

String s = "Your Last Login was 2013/10/04 13:06:45 (0 Days, 0 Hours, 0 Minutes)"; 
String[] words = s.split("\\s+"); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
String datePlusTime = null; 
for (int i = 0; i < words.length; i++) { 
    try { 
     sdf.parse(words[i]); 
     // It comes here, that means its the date we want 
     datePlusTime = words[i] +" "+ words[i + 1]; // This has date plus the time 
     // I concatenated them just for an example. You can do whatever you want with them. 
     break; 
    } catch (ParseException pe) { 
     // Eat the exception 
     // I must say this is not a good practice though 
    } 
} 

System.out.println(datePlusTime); // Do whatever you want with it. 

P.S: - Это предполагает, что существует пространство между 45 и (. Если этого не произошло, вам необходимо удалить последний символ строки words[i+1].

+0

целочисленное значение означает 0 дней, 0 часов, 0 минут. 0 - это целое число, которое я тоже получаю. – cchua

0

Если ваша строка статична, вы можете попробовать, как показано ниже.

String s = "您上次登录是 2013/10/04 13:06:45( 0 天, 0 小时 0 分钟 )"; 
System.out.println(s.substring(6, 17) + " -- " + s.substring(18,26) + "-- " +s.substring(28, 29) + "-- " +s.substring(33, 34) + "-- " +s.substring(38, 39)); 

Возможно, это нехорошо.

+1

Если его строка статична, ему даже не придется проходить через эту большую проблему. – Rohan

+0

Я знаю, что значения даты, времени, часа, мин и секунды могут быть изменены. – Dhinakar

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