给出的字符数组是
char[] arr = {123*4*5}
输出应为
String str = "123-4-5"
答案 0 :(得分:3)
1)这不是您声明char数组的方式。如评论中所指出的,它应该是:
char[] arr = {'1','2','3','*','4','*','5'};
2)如果您想要String
,为什么不以String
开始呢?
3)您可以从String
构造一个char[]
并使用String.replace(char oldchar, char new char)
,它是Google搜索的第一个结果。代码:
char[] arr = {'1','2','3','*','4','*','5'};
String str = String.valueOf(arr).replace('*', '-');
4)如果需要在制作char[]
之前在String
上进行操作,则可以简单地遍历数组:
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
,并且考虑到value
,总是可以保证在xxx=9 y=9 z=9
之前找到999*9*9 = 80,919 > max(char)=65,535
>
答案 1 :(得分:0)
您应该知道的第一件事是123 * 4 * 5
的意思是2460,所以楼上的点是正确的。
char[] arr = {'1','2','3','*','4','*','5'};
System.out.println(new String(arr).replaceAll("\\*","-"));
答案 2 :(得分:0)
char[] arr = {'1','2','3','*','4','*','5'};
String str = String.valueOf(arr).replace('*', '-');
从char数组中获取一个字符串,并采用replace方法将'*'替换为'-'