Reputation: 121
I want to write java code to convert left side strings to right ones.
1234_hello -- 1234_Hello
hello Data -- Hello Data
hELLO data -- Hello data
1234hEllo -- 1234Hello
heLLO1234hEllo -- Hello1234hEllo
$hello -- $Hello
Could you please help with the solution? Thank you!
Upvotes: 2
Views: 237
Reputation: 3448
Here is a solution:
public static void main(String[] args) {
try {
System.out.println(convertString("1234_hello"));
System.out.println(convertString("hello Data"));
System.out.println(convertString("hELLO data"));
System.out.println(convertString("1234hEllo"));
System.out.println(convertString("heLLO1234hEllo"));
System.out.println(convertString("$hello"));
System.out.println(convertString("$1234hEllo_TTHjjZ"));
}
catch (Exception e) {
e.printStackTrace();
}
}
private static String convertString(String string) {
String result = string;
final String regex1 = "^([^a-zA-Z]+)([a-zA-Z])([a-zA-Z]*)([^a-zA-Z].*)$";
final String regex2 = "^([a-zA-Z])([a-zA-Z]*)([^a-zA-Z].*)$";
final String regex3 = "^([^a-zA-Z]+)([a-zA-Z])([a-zA-Z]*)$";
final Pattern pattern1 = Pattern.compile(regex1, Pattern.MULTILINE);
final Pattern pattern2 = Pattern.compile(regex2, Pattern.MULTILINE);
final Pattern pattern3 = Pattern.compile(regex3, Pattern.MULTILINE);
Matcher matcher1 = pattern1.matcher(string);
Matcher matcher2 = pattern2.matcher(string);
Matcher matcher3 = pattern3.matcher(string);
if (matcher1.find()) {
result = matcher1.group(1) + matcher1.group(2).toUpperCase() + matcher1.group(3).toLowerCase() + matcher1.group(4);
}
else if (matcher2.find()) {
result = matcher2.group(1).toUpperCase() + matcher2.group(2).toLowerCase() + matcher2.group(3);
}
else if (matcher3.find()) {
result = matcher3.group(1) + matcher3.group(2).toUpperCase() + matcher3.group(3).toLowerCase();
}
return result;
}
The result is as expected:
1234_Hello
Hello Data
Hello data
1234Hello
Hello1234hEllo
$Hello
$1234Hello_TTHjjZ
Upvotes: 3
Reputation: 16
I have a solution for you but it is not efficient:
public static String toCamelCase(String input) {
StringBuilder output = new StringBuilder();
for(int i = 0; i < input.length(); i++) {
if(i == 0) {
output.append(Character.toUpperCase(input.charAt(i)));
continue;
}
if(Character.isLetter(input.charAt(i))) {
if(Character.isLetter(input.charAt(i-1))) {
output.append(Character.toLowerCase(input.charAt(i)));
} else {
output.append(Character.toUpperCase(input.charAt(i)));
}
} else {
output.append(input.charAt(i));
}
}
return output.toString();
}
Upvotes: 0