您好我无法实现此功能
功能: 解压缩字符串。字符串中的字符前面有一个数字。这个数字告诉你重复这封信的次数。返回一个新字符串。 “3d1v0m”变为“dddv”
到目前为止,我发现我的代码不正确。我不确定如何解决它。
到目前为止我的代码是: int start = 0;
for(int j = 0; j < s.length(); j++){
if (s.isDigit(charAt(s.indexOf(j)) == true){
Integer.parseInt(s.substring(0, s.index(j))
答案 0 :(得分:2)
假设输入的格式正确,以下可以是使用for循环的简单代码。当然,这不是一个时髦的代码,您可以使用Commons Lang或Guava编写更简洁和功能性的代码。
StringBuilder builder = new StringBuilder();
for (int i = 0; i < s.length(); i += 2) {
final int n = Character.getNumericValue(s.charAt(i));
for (int j = 0; j < n; j++) {
builder.append(s.charAt(i + 1));
}
}
System.out.println(builder.toString());
答案 1 :(得分:2)
以下是您可能希望使用的使用Regex
的解决方案:
String query = "3d1v0m";
StringBuilder result = new StringBuilder();
String[] digitsA = query.split("\\D+");
String[] letterA = query.split("[0-9]+");
for (int arrIndex = 0; arrIndex < digitsA.length; arrIndex++)
{
for (int count = 0; count < Integer.parseInt(digitsA[arrIndex]); count++)
{
result.append(letterA[arrIndex + 1]);
}
}
System.out.println(result);
<强>输出强>
dddv
此解决方案可扩展,支持超过1位数字和超过1个字母的模式。
即
<强>输入强>
3vs1a10m
<强>输出强>
vsvsvsammmmmmmmmm
答案 2 :(得分:0)
虽然Nami的答案简洁而且很好。我仍在添加我的变种解决方案,作为静态方法构建,不使用嵌套的For循环,而是使用While循环。并且,它要求输入字符串具有偶数个字符,并且压缩字符串中的每个奇数位置字符都是数字。
public static String decompress_string(String compressed_string)
{
String decompressed_string = "";
for(int i=0; i<compressed_string.length(); i = i+2) //Skip by 2 characters in the compressed string
{
if(compressed_string.substring(i, i+1).matches("\\d")) //Check for a number at odd positions
{
int reps = Integer.parseInt(compressed_string.substring(i, i+1)); //Take the first number
String character = compressed_string.substring(i+1, i+2); //Take the next character in sequence
int count = 1;
while(count<=reps)//check if at least one repetition is required
{
decompressed_string = decompressed_string + character; //append the character to end of string
count++;
};
}
else
{
//In case the first character of the code pair is not a number
//Or when the string has uneven number of characters
return("Incorrect compressed string!!");
}
}
return decompressed_string;
}