Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How combine two strings with random position android

Tags:

java

android

I'm trying to generate a license key with two strings combined both into another one string.

String key1 = "X1X2X3X4..Xn"; //this is for the imei key cellphone
String key2 = "Y1Y2Y3Y4M1M2D1D2H1H2m1m2"; //this is a key to mix with the first one

The result of the combination should be like this:

String result = "D1H1X1X2X3Y2Y4X4X5...XnY3Y1D2m2m1H1H2";

I split my strings every two spaces like this and I save into an array:

String [] key1splited = splitStringEvery(key1, 2);
String [] key2splited = splitStringEvery(key2, 2);

public String[] splitStringEvery(String s, int interval) {
    int arrayLength = (int) Math.ceil(((s.length() / (double)interval);
    String[] result = new String[arrayLength];

    int j = 0;
    int lastIndex = result.length - 1;
    for (int i = 0; i < lastIndex; i++) {
        result[i] = s.substring(j, j + interval);
        j += interval;
    } 
    result[lastIndex] = s.substring(j);

    return result;
}

How can I make the combination of my strings give me a result that looks like this:

String result = "D1H1X1X2X3Y2Y4X4X5...XnY3Y1D2m2m1H1H2";

I hope someone could give me an idea how to solve this.

I am trying to do something like this, but it is very poor method:

static String res = "";
String[] key1splited = splitStringEvery(key1, 2);
String[] key2splited = splitStringEvery(key2, 2);
for (int i = 0; i < key2splited.length; i++) {
    if (key2splited[i].equals("D1")) {
        res = key2splited[i];
    }
    if (key2splited[i].equals("H1")) {
        res += key2splited[i];
        for (int j = 0; j < key1splited.length; j++) {
            if (key1splited[j].equals("X1")) {
                res += key1splited[j];
            }
            if (key1splited[j].equals("X2")) {
                res += key1splited[j];
            }
            if (key1splited[j].equals("X3")) {
                res += key1splited[j];
            }
        }
    }
}

And so on, but this isn't a good way to do it because the strings are going to change.

like image 779
Salvador Figueroa Avatar asked Dec 15 '14 16:12

Salvador Figueroa


People also ask

How do you mix two strings together?

Concatenation is the process of combining two or more strings to form a new string by subsequently appending the next string to the end of the previous strings. In Java, two strings can be concatenated by using the + or += operator, or through the concat() method, defined in the java. lang. String class.

Can you randomize strings in Java?

You can also generate a random alphanumeric string of fixed length using streams in Java. A random string is generated by first generating a stream of random numbers of ASCII values for 0-9, a-z and A-Z characters.

How do you randomly pick a string in Java?

Method 1: Using Math. random() Here the function getAlphaNumericString(n) generates a random number of length a string. This number is an index of a Character and this Character is appended in temporary local variable sb.


1 Answers

I think the easiest way you could do this is to separate the tokens out of each key (2-char long tokens like X1, D1 etc.) and then combine the tokens into a single String.

Further, you shuffle up the String, extracting random tokens and building the Licence Key:

Random rand = new Random(); // generate Random object only once for efficiency purposes

// ... rest of your code

String getLicenceKey(String key1, String key2){
    List<String> tokens = new ArrayList<String>();

    // add tokens from key1
    for(int i = 0; i < key1.length(); i += 2) {
        tokens.add(key1.substring(i, i + 2));
    }

    // add tokens from key2
    for(int i = 0; i < key2.length(); i += 2) {
        tokens.add(key2.substring(i, i + 2));
    }

    // build the random result out of the tokens
    StringBuilder result = new StringBuilder();
    while(tokens.size() != 0){
        int randomPos = rand.nextInt(tokens.size());
        result.append(tokens.remove(randomPos));
    }

    return result.toString();
}

Sample outputs for the inputs you gave:

m2XnD2m1H2X1..Y3Y1Y2Y4M1X2M2D1H1X4X3
H2Y2X4M1M2H1Y3Y1m2X1X2D1m1Xn..X3Y4D2
X1X4X3H2D2H1..M2m2Y3m1Y4M1D1Y1X2XnY2

Sample outputs for key1="A1B1C1", key2="D1E1F1":

D1F1B1A1C1E1
C1A1D1B1E1F1
F1E1B1C1D1A1
like image 169
nem035 Avatar answered Oct 20 '22 03:10

nem035