将字符串转换为longs

时间:2017-10-22 22:01:16

标签: java string long-integer

如何迭代数组并尝试将字符串转换为long?这是一个例子:

String[] myArray = ["123", "122 Street", "2334"];
    // I'm trying to loop through an array like this and cast to a long
for(String s: myArray) {
  try {
   long newValue = Long.valueOf(s);
   // How would I swap the old values to their new long type in the 
   // myArray?
    } catch(Exception error) { }
 }

4 个答案:

答案 0 :(得分:3)

您无法将long放入String[]。您需要创建一个专门用于保存long的第二个数组。我不确定“122 Street”是否会正确投射或给出错误。

String[] myArray = ["123", "122 Street", "2334"];
long[] longs = new long[myArray.length];
for (int i = 0; i < myArray.length; i++) {
  try {
    longs[i] = Long.valueOf(myArray[i]);
  } catch (Exception e) {
    // Handle error case
  }
}    

答案 1 :(得分:1)

Java数组只存储它们声明要存储的类型(Java不是JavaScript)。

这是一个单行:

long[] numbers = Arrays.stream(myArray)
    .filter(s -> s.matches("\\d+"))
    .mapToLong(Long::parseLong)
    .toArray();

答案 2 :(得分:0)

  1. 在将字符串转换为long之前,我确认它只有数字,以避免在Java中非常昂贵的异常(与Python之类的其他语言不同,其中提升和捕获异常是完全正常的)。
  2. 由于我们无法知道新数组的大小,并且包含null的数组不理想,我们可以使用List来收集结果和我们完成后 - 将其转换为Long
  3. 数组
    public static void main(String[] args) {
        String[] myArray = {"123", "122 Street", "2334"};
        Long[] array = stringsToLongs(myArray);
    }
    
    private static Long[] stringsToLongs(String[] myArray) {
    
        List<Long> list = new LinkedList<>();
        for(String s: myArray) {
            if (s.matches("\\d+"))
                list.add(Long.valueOf(s));
        }
        return list.toArray(new Long[list.size()]);
    }
    

答案 3 :(得分:0)

  

我如何将旧值换成myArray中的新long类型?

你不会。你的数组已经是Type string。它只能接受string值。如果你想要一个类型为long等效数组,你将需要它。这种类型的不同数组;存储在内部的等效值。

其他答案在目前的措辞中在技术上并不正确。一个 可以 long 放入string[]数组中; 不是long类型/格式

同样适用于反向(这似乎是您想要做的):您可以long[]保存以前为string类型/格式的数据。你只需要进行适当的转换。

其他答案稍微有点错误,就是在技术上没有 cast ,在词的真正含义中,在数字类型和字符串之间。相反,做的是 解析

如果您的问题具体,请使用long.valueOf(string s)long表示中解析string值。

请注意,此方法需要string表示某个数字,并且会因NumberFormatException而失败。

这包括"122 Street"。那不是一个数字。 "122"是。因此,在将其转换为"122"之前,您必须首先从字符串的其余部分解析long

解决方案:

String[] myArray = ["123", "122 Street", "2334"];
myArray[1] = myArray[1].substring(0,2); //Removes " Street" from second element.
long[] myLongs = new long[myArray.length];
for(int i=0; i<myArray.length; i++) {
    try {
        myLongs[i] = Long.valueOf(myArray[i]);
    } catch(NumberFormatException nfe) {
        System.out.println("Element at index "+i+" could not be parsed.");
    } catch(Exception ex) {
        System.out.println("Some other exception happened.");
    }
}