繁体   English   中英

在给定的字符数组中用“-”替换“*”

[英]Replace "*" with "-" in given character array

给定的字符数组是

char[] arr = {123*4*5}

输出应该是

String str = "123-4-5"

1)这不是你声明一个char数组的方式。 正如评论中指出的那样,它应该是:

char[] arr = {'1','2','3','*','4','*','5'};

2)如果你想要一个String为什么不从一个String开始?

3) 您可以从char[]构造一个String并使用String.replace(char oldchar, char new char)作为 Google 搜索中的第一个结果。 代码:

char[] arr = {'1','2','3','*','4','*','5'};
String str = String.valueOf(arr).replace('*', '-');

4) 如果您需要在创建String之前在char[]上执行此操作,您可以简单地遍历数组:

char[] arr = {'1','2','3','*','4','*','5'};
for(int i=0; i<arr.length; i++)
    if(arr[i] =='*') arr[i] = '-';
String str = String.valueOf(arr); 

编辑:根据与 OP 的评论和讨论,问题似乎与发布的完全一样。 那是:

char[] arr = {xxx*y*z};
String str = transformCharArr(arr); 

对于arr={123*4*5}str = "123-4-5"和对于arr={122*2}str = "122-2"

因此,我制作了一个小函数来实现这一点并解决这两种情况。

假设:

1) xxx 始终是三位数字,最小为 100,最大为 999。

2) y 为非零的 1 位数字 [1-9],与 z 相同。

3) 如果 y 或 z 等于 1,则忽略它,因为乘以 1 对结果没有任何影响。

4) xxx 总是最小化。 也就是说,对于123*4*5 ,相对于 xxx>=100 的假设(1),实现这一点的最低可能xxx是 123。

5) y 和 z 最大化,z 有利于最大化。 同样关于两者的假设(2)。

因此,代码为:

static String transformCharArr(char[] arr){
    if(arr.length > 1) return ""; // array should only contain 1 element
    int value = (int)arr[0]; // using int since char is the only unisgned 2-byte type in all of Java, short isn't enough given MAX(short) = 32,767 while max(char) = 65,535
    short xxx=100, y=1, z=1; // all shorts since they never exceed certain limits
    int product = 0; // to stop the loop, int because short*short*short gives int type, and product is comparable to value, so it has to support more than max(short)
    for(xxx=100; xxx<=999; xxx++){ // first loop xxx to minimize it
        for(y=1; y<=9; y++){ // loop y before z to favor maximizing z
            for(z=1; z<=9; z++){ // ensures maximizing z before y
                if((product = xxx*y*z)== value) 
                    break;
            }
            if(product == value) break;
        }
        if(product == value) break;
    }
    if(y==1) return String.format("%d-%d", xxx, z); // if y is 1, ignore it
    if(z==1) return String.format("%d-%d", xxx, y); // if z is 1 ignore it
    return String.format("%d-%d-%d", xxx,y,z);
}

测试它:

public static void main(String[] args) {
    char[] arr1 = {123*4*5};
    System.out.println(transformCharArr(arr1));
    char[] arr2 = {122*2};
    System.out.println(transformCharArr(arr2));
}

输出:

123-4-5
122-2

分析:

时间复杂度:O(C) 给定循环不能超过999*9*9并且总是保证在xxx=9 y=9 z=9之前找到value ,因为999*9*9 = ‭80,919‬ > max(char)=65,535

首先你应该知道123 * 4 * 5意味着2460,所以楼上的观点是对的。就像这样:

char[] arr = {'1','2','3','*','4','*','5'};
System.out.println(new String(arr).replaceAll("\\*","-"));
char[] arr = {'1','2','3','*','4','*','5'};
String str = String.valueOf(arr).replace('*', '-');

从您的字符数组中获取一个字符串,并采用替换方法从 '-' 中替换 '*'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM