我想 return 一个格式化的 Phone 使用子字符串但奇怪的数字 return
I want to return a formatted Phone Number with use substring but odd thing return
我是 java 的新手。为什么这不起作用??
这必须得到这样的东西 formatPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
然后 return (123) 456-7890
感谢您的回答。
public class Program {
public static String formatPhoneNumber(int[] nums) {
String nums2=nums.toString();
String a_final ="";
//"(123) 456-7890"
a_final="\""+("+nums2.substring(0,2)+")"+"\t"+nums2.substring(3,5)+"-"+nums2.substring(6,9)+"\"";
return a_final;
}
}
String nums2=nums.toString();
并不像您认为的那样。通过使用 System.out.println
打印结果来检查结果
让它做你认为它做的事情的快速方法是
String nums2=java.util.Arrays.toString(nums).replaceAll("\D", "");
使用toString()时;原始类型数组中的方法 结果是内存中的位置 e.x "[I@1b28cdfa"
如果您想将数字数组复制到字符串中,只需使用 StringBuilder
StringBuilder builder = new StringBuilder();
for (int number : nums){
builder.append(number);
}
String nums2 = builder.toString();
String a_final="("+nums2.substring(0,3)+")"+nums2.substring(3,6)+"-"+nums2.substring(6,9);
System.out.println(a_final);
toString
方法 int[]
returns:
getClass().getName() + "@" + Integer.toHexString(hashCode());
因此,您不会将所有数字简单地附加为字符串。要获得 nums2
字符串,您只需将 nums
元素一一附加为:
String nums2 = "";
for (int e : nums)
nums2 += e;
最终结果字符串为:
a_final="\""+"("+nums2.substring(0,3)+")"+"\t"+nums2.substring(3,6)+"-"+nums2.substring(6,9)+"\"";
请注意您的 a_final
不正确,因为它缺少一些字符。我在上面修改过。
您可以使用 MaskFormatter
import javax.swing.text.MaskFormatter;
//...
public static String formatPhoneNumber(int[] nums) throws ParseException {
StringBuilder sb=new StringBuilder();
for(int value:nums){
sb.append(value);
}
String phoneMask= "(###)-###-####";
MaskFormatter maskFormatter= new MaskFormatter(phoneMask);
maskFormatter.setValueContainsLiteralCharacters(false);
return maskFormatter.valueToString(sb.toString()) ;
}
这是使用 stream API.
将 int
数组转换为 String
的替代方法
(代码后的注释。)
import java.util.Arrays;
import java.util.stream.Collectors;
public class Program {
public static String formatPhoneNumber(int[] nums) {
String nums2 = Arrays.stream(nums)
.mapToObj(i -> String.valueOf(i))
.collect(Collectors.joining());
String aFinal = String.format("\"(%s)\t%s-%s\"",
nums2.substring(0, 3),
nums2.substring(3, 6),
nums2.substring(6));
return aFinal;
}
public static void main(String[] args) {
System.out.println(formatPhoneNumber(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}));
}
}
由于final
不能作为变量名,所以改成了a_final
。我认为您应该尝试遵守 java naming conventions,因此我将变量名称更改为 aFinal
。使用约定可以让其他人更容易阅读和理解您的代码,这有助于当您希望人们帮助您解决代码中的问题时。
此外,您在调用 substring
时使用的索引与您的预期输出不匹配(如您的问题中所述)。在上面的代码中,我也更正了这些。
这是我 运行 上述代码时得到的输出。
"(123) 456-7890"
我是 java 的新手。为什么这不起作用??
这必须得到这样的东西 formatPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
然后 return (123) 456-7890
感谢您的回答。
public class Program {
public static String formatPhoneNumber(int[] nums) {
String nums2=nums.toString();
String a_final ="";
//"(123) 456-7890"
a_final="\""+("+nums2.substring(0,2)+")"+"\t"+nums2.substring(3,5)+"-"+nums2.substring(6,9)+"\"";
return a_final;
}
}
String nums2=nums.toString();
并不像您认为的那样。通过使用 System.out.println
打印结果来检查结果
让它做你认为它做的事情的快速方法是
String nums2=java.util.Arrays.toString(nums).replaceAll("\D", "");
使用toString()时;原始类型数组中的方法 结果是内存中的位置 e.x "[I@1b28cdfa"
如果您想将数字数组复制到字符串中,只需使用 StringBuilder
StringBuilder builder = new StringBuilder();
for (int number : nums){
builder.append(number);
}
String nums2 = builder.toString();
String a_final="("+nums2.substring(0,3)+")"+nums2.substring(3,6)+"-"+nums2.substring(6,9);
System.out.println(a_final);
toString
方法 int[]
returns:
getClass().getName() + "@" + Integer.toHexString(hashCode());
因此,您不会将所有数字简单地附加为字符串。要获得 nums2
字符串,您只需将 nums
元素一一附加为:
String nums2 = "";
for (int e : nums)
nums2 += e;
最终结果字符串为:
a_final="\""+"("+nums2.substring(0,3)+")"+"\t"+nums2.substring(3,6)+"-"+nums2.substring(6,9)+"\"";
请注意您的 a_final
不正确,因为它缺少一些字符。我在上面修改过。
您可以使用 MaskFormatter
import javax.swing.text.MaskFormatter;
//...
public static String formatPhoneNumber(int[] nums) throws ParseException {
StringBuilder sb=new StringBuilder();
for(int value:nums){
sb.append(value);
}
String phoneMask= "(###)-###-####";
MaskFormatter maskFormatter= new MaskFormatter(phoneMask);
maskFormatter.setValueContainsLiteralCharacters(false);
return maskFormatter.valueToString(sb.toString()) ;
}
这是使用 stream API.
将 int
数组转换为 String
的替代方法
(代码后的注释。)
import java.util.Arrays;
import java.util.stream.Collectors;
public class Program {
public static String formatPhoneNumber(int[] nums) {
String nums2 = Arrays.stream(nums)
.mapToObj(i -> String.valueOf(i))
.collect(Collectors.joining());
String aFinal = String.format("\"(%s)\t%s-%s\"",
nums2.substring(0, 3),
nums2.substring(3, 6),
nums2.substring(6));
return aFinal;
}
public static void main(String[] args) {
System.out.println(formatPhoneNumber(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}));
}
}
由于final
不能作为变量名,所以改成了a_final
。我认为您应该尝试遵守 java naming conventions,因此我将变量名称更改为 aFinal
。使用约定可以让其他人更容易阅读和理解您的代码,这有助于当您希望人们帮助您解决代码中的问题时。
此外,您在调用 substring
时使用的索引与您的预期输出不匹配(如您的问题中所述)。在上面的代码中,我也更正了这些。
这是我 运行 上述代码时得到的输出。
"(123) 456-7890"