Je veux créer des tableaux hours et minutes qui, pour 19:49, devraient contenir

hours[0] = 1
hours[1] = 9
minutes[0] = 4
minutes[1] = 9

Le problème est que lorsque j'exécute du code:

Calendar rightNow = Calendar.getInstance();
String hour[] = String.valueOf(rightNow.get(Calendar.HOUR_OF_DAY)).split("");
String minute[] = String.valueOf(rightNow.get(Calendar.MINUTE)).split("");

Et quand j'imprime ceci

System.out.println(hour[0] + ""+hour[1] + ":" + minute[0] +""+minute[1]);

J'ai cette sortie 1:4, mais elle devrait être 19:49

Mise à jour: J'utilise 1.7 JDK et forme ce que je vois hour[2] contient 9 et minute[2] 9.

2
Larry 31 déc. 2015 à 21:50

2 réponses

Meilleure réponse

Eh bien, je suppose que ce que vous cherchez est quelque chose comme ça

    int[] hour = new int[2];
    int[] minute = new int[2];

    Calendar rightNow = Calendar.getInstance();

    int tempHour = rightNow.get(Calendar.HOUR_OF_DAY);
    int tempMin  = rightNow.get(Calendar.MINUTE);

    hour[0]   = (int)Math.floor(tempHour/10);
    hour[1]   = tempHour%10;

    minute[0] = (int)Math.floor(tempMin/10);
    minute[1] = tempMin%10;

    System.out.println(hour[0] + "" + hour[1] + ":" + minute[0] + "" + minute[1]);
0
Kyle Luke 1 janv. 2016 à 14:55

Le problème dans la pré-Java-8 est que lorsque nous split(delimiter) chaîne comme

delimiter[Data]delimiter[Data]delimiter[Data]

Nous obtiendrons comme résultat un tableau

"", "[Data]", "[Data]", "[Data]"

Dans votre cas, le délimiteur est une chaîne vide "", et une chaîne vide existe non seulement entre les caractères, mais également au début et à la fin de la chaîne.

Pour résoudre ce problème, vous pouvez utiliser split("(?!^)") qui se divisera à chaque endroit tant qu'il n'a pas de début de chaîne (^) après (ce qui exclut la chaîne vide au début de votre texte).

Dans Java 8, ce comportement a changé: Pourquoi dans Java 8 split supprime parfois les chaînes vides au début du tableau de résultats?

2
Community 23 mai 2017 à 12:24