0

convert string to camelCase

eg: "user_id" to "userId" "user_name" to "userName" "country_province_city" to "countryProvinceCity"

how to do that in a easy way?

ps:"country_province_city" should be "countryProvinceCity" not "countryprovincecity"

lionyu
  • 593
  • 3
  • 5
  • 14

5 Answers5

3

As Fast Snail mentions, simply use, for example, if String str = "user_id, user_name, user_id";, call str = str.replaceAll("userID", "user_id");, causing str to now have the value "userID, user_name, userID"

Alternatively, a more complete method would be as follows

public String toCamel(String str) {
    String[] splits = str.split("_");
    for (int i = 1; i < splits.length; i++) {
        char first = Character.toUpperCase(splits.charAt(0));
        if (splits[i].length() > 0) 
            splits[i] = first + splits[i].substring(1);
        else 
            splits[i] = first + "";
    }
    String toRet = "";
    for (String s : splits)
        toRet += s;
    return toRet;
}
SexmanTaco
  • 289
  • 1
  • 9
3

I would use a loop and a StringBuilder. Something like

String[] arr = { "user_id", "user_name", "country_province_city" };
for (String str : arr) {
    StringBuilder sb = new StringBuilder(str);
    int pos;
    while ((pos = sb.indexOf("_")) > -1) {
        String ch = sb.substring(pos + 1, pos + 2);
        sb.replace(pos, pos + 2, ch.toUpperCase());
    }
    System.out.printf("%s = %s%n", str, sb);
}

And I get the (requested)

user_id = userId
user_name = userName
country_province_city = countryProvinceCity
Elliott Frisch
  • 198,278
  • 20
  • 158
  • 249
1

This is a very simple one:

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String result = "";

        String input = scan.nextLine();
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == '_') {
                result += input.toUpperCase().charAt(i + 1);
                i = i + 1;
            } else {
                result += input.toLowerCase().charAt(i);
            }
        }
        System.out.println(result);
    }

if you like to do it many times, I advice you to use a while loop to keep repeating the same code over and over again:

while (true) {
  //the previous code
  }
bad
  • 92
  • 10
1

http://commons.apache.org/proper/commons-lang/javadocs/api-3.4/index.html

String str="country_province_city";
wordUtils.capitalize(str, '_');
str=str.replaceAll("_", "");

output: countryProvinceCity

kingAm
  • 1,755
  • 1
  • 13
  • 23
0

For another point of view that the answers above you can also do it with split function and two loops, like this:

String[] strings = {"user_id","user_name","country_province_city"};

for (int i = 0; i < strings.length; i++)
{
    String string = strings[i];
    String totalString = "";

    String[] divide = string.split("_");

    for(int j = 0; j < divide.length; j++)
    {
       if(j != 0)
       {
          divide[j] = "" + divide[j].toUpperCase().charAt(0) + divide[j].substring(1,divide[j].length());
       }

       totalString = totalString + divide[j];
    }
}

If you want to show this changed Strings by console you just have to add System.out.println after the second loop and inside the first one, like this:

for (int i = 0; i < strings.length; i++)
    {
        //The same code as the code that I put in the example above

        for(int j = 0; j < divide.length; j++)
        {
          //The same code as the example above
        }

      System.out.println(totalString);
    }

On the contrary, if your objective it's to store them into an array, you can do it like this:

String[] store; 

for (int i = 0; i < strings.length; i++)
        {
            //The same code as the code that I put in the example above

            store = new String[divide.length];

            for(int j = 0; j < divide.length; j++)
            {
               //The same code as the example above  
            }

          store[j] = totalString;
        }

If you have any doubt about the code please let me know.

I expect it will help to you!

Francisco Romero
  • 12,787
  • 22
  • 92
  • 167