[英]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.