String Java Consommer tableau pour définir des paires de valeurs clés

voix
1

Ayant du mal à garder l'état à l'esprit ici. Apprécierait toute aide. J'ai une chaîne qui est définie par les utilisateurs finaux et n'a pas de validation et est un texte ouvert. Je dois prendre cela et mettre des paires de valeurs clés. J'ignore toutes les autres lignes (par exemple: en commençant par: ou) Je sais que la clé commence par un tiret (par exemple: -filePickupDir) et la valeur sera soit après le prochain espace ou après l'autre espace caractère de nouvelle ligne . S'il y a une barre oblique de continuation (), je sais qu'il ya une autre paire de valeurs clés. Voici quelques exemples sur la façon dont les utilisateurs ont pu mettre cela en place:

-filePickupDir / export / home / PickupDir / \

ou

-filePickupDir \

/ Export / home / AdjPickupDir / \

Exemple de code:

HashMap<String, String> processMap = new HashMap<>();
    String jobProcess = job.getProcess(); //this is a method that gets the string
    String lines[] = jobProcess.split([\\r\\n]+);

    int varCount = 0;
    for (String s: lines) {
        String key = ;
        String val = ;
        int count = 0;
        int count2 = 0;
        if (s.startsWith(!)) {

        } else if (s.startsWith(:)) {

        } else if (s.startsWith(-)) {
            count = s.length() - s.replace( , ).length();
            count2 = s.length() - s.replace(\\, ).length();
            System.out.println(Line space count:  + count +  continue line count:  + count2);
            if (count == 1 && count2 == 0 || count == 3 && count2 == 1 || count == 1 && count2 == 1) {
                s = s.trim();
                int keyIndex = s.indexOf(-);
                keyIndex = +1;
                int firstSpaceIndex = s.indexOf( );
                int spaceAfterFirstSpaceIndex = firstSpaceIndex + 1;
                int lastIndex = s.length();
                String keyString = s.substring(keyIndex, firstSpaceIndex);
                String valueString = s.substring(spaceAfterFirstSpaceIndex, lastIndex);
                if (count == 3 && count2 == 1) {
                    int removeSlashIndex = valueString.length();
                    valueString = valueString.substring(1, removeSlashIndex - 3);
                }
            } else if (count == 1 && count2 == 1) {
                //value is on the next line
                //We need to let the program know we have a key but no value and need to maintain state
            }

            //String split = String.valueOf(s.split(^-(\\w|\\d|\\s)+));
            //System.out.println(split is: +split.toString());


        } else {
            //This is value if the key is on its own line above
            s = s.trim();
            System.out.println(Value:  + s);
        }
    }

Je vais avoir des problèmes envelopper ma tête autour de garder ici état. Je fondamentalement juste besoin d'une clé qui commence par une barre oblique (-), puis la valeur est la suivante chaîne séparée par un espace ou un espace et un saut de ligne. Continuer le traitement jusqu'à ce que toutes les paires de clés se trouvent.

Exemple Tableau chaîne à consommer:

-hostIds \

9 \

-maxRecords \

1000 \

-xsl \

$ Batchslx / ziproot / EmailXsl

Créé 07/11/2018 à 20:23
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Je recommande d'utiliser Regex pour le faire. Vous pouvez capturer le premier exemple comme ceci:

String firstTest = "-filePickupDir /export/home/PickupDir/ \\";

//the capture groups are in the parantheses
String patternString = "[\\n\\s]?-(\\w+)(.+)\\\\";

Pattern pat =  Pattern.compile(patternString);
Matcher match = pat.matcher(firstTest);
match.find();

System.out.println(match.group(0)); //whole String
System.out.println(match.group(1)); //first capture group
System.out.println(match.group(2)); //second capture group
//results:
//0 -filePickupDir /export/home/PickupDir/ \
//1 filePickupDir
//2 /export/home/PickupDir/ 

Si vous prolongez encore la regex, vous serez en mesure de saisir exactement comme vous l'avez décrit.

Créé 07/11/2018 à 22:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more