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}
ischar[]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('*', '-');