Java 替换“*&引用;加上-&引用;在给定字符数组中

Java 替换“*&引用;加上-&引用;在给定字符数组中,java,Java,给定的字符数组是 char[]arr={123*4*5} 输出应该是 String str=“123-4-5”1)这不是声明字符数组的方式。正如评论中所指出的,应该是: char[] arr = {'1','2','3','*','4','*','5'}; 2) 如果你想要一个字符串为什么不从字符串开始呢 3) 您可以从char[]构造String,并使用String.replace(char oldchar,char new char),这是谷歌搜索的第一个结果。代码: char[] arr

给定的字符数组是


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

输出应该是

String str=“123-4-5”
1)这不是声明字符数组的方式。正如评论中所指出的,应该是:

char[] arr = {'1','2','3','*','4','*','5'};
2) 如果你想要一个
字符串
为什么不从
字符串开始呢

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

char[] arr = {'1','2','3','*','4','*','5'};
String str = String.valueOf(arr).replace('*', '-');
4) 如果在生成
字符串之前需要在
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); 
对于
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);
}
输出:

123-4-5
122-2
分析:


时间复杂度:O(C)给定循环的运行时间不能超过
999*9*9
,并且在
xxx=9 y=9 z=9
给定
999*9*9=‭80,919‬ > max(char)=65535

您首先应该知道的是,
123*4*5
表示2460,因此楼上的点是对的。如下所示:

char[]arr={'1','2','3','*','4','*','5'};
System.out.println(新字符串(arr.replaceAll)(“\\\*”,“-”);

从您的字符数组中获取一个字符串,并使用replace方法从“-”中重新拼出“*”

使用
char[]arr={'1'、'2'、'3'、'*'、'4'、'*'、'5'}可能会更幸运-您当前的“数组”包含一个值,并且没有一个好的方法来反转乘法。是否还要将您的字符数组转换为字符串对象?或者只是一个简单的replace@ElliottFrisch无法更改数组格式,这是面试问题。不管有多少个值,您都需要解析它并用-@smac89替换这些*字符。java字符是16位整数类型。您可以存储值,但不能反转操作。
char[]arr={123*4*5}
is
char[]arr={2460}-现在您需要找到一种方法将2460转换为
123-4-5
。祝你好运!您提供的答案不应出现在上。如果是简单的字符数组,那么每个人都可以很容易地解决这个问题。实际上,声明一个字符是一种很棘手的方法array@RajuMuke我明白你想做什么了。没有额外的信息,就不可能决定怎么做。您希望将一个字符(单个字符)分解为3个数字,这些数字相乘在一起,然后在此乘法中生成一个字符串,并用破折号替换乘法符号。编号
2460
可以是
1230*2
,或
615*4
615*2*2
或(如所述)
123*4*5
。在没有额外信息的情况下,你到底该如何将它分解成无限的可能性中的
123*4*5
?不,它是有限数量的可能性,一个适合。但是,为什么不生成所有长度为6、带“-”和一个数字的排列呢?每个人,我认为我们都是人,对我们来说,一切都是可能的。除非有人这样做,否则这似乎是不可能的。@gurioso重点是:不可能“随机”选择“数组”声明中使用的一种排列方式。除非您可以访问Java源代码文件,在该文件中读取该文件并事先知道声明行的位置。如果你能做到这一点,那么你可以把它作为一个子串,不用麻烦就可以使用它。
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
char[] arr = {'1','2','3','*','4','*','5'};
String str = String.valueOf(arr).replace('*', '-');