如何在字符串索引中分隔char和int的值

时间:2013-10-15 06:33:22

标签: java arrays parsing char int

好吧基本上我想在保留在数组中时将字符串中的元素与int和char值分开,但说实话,最后的部分不是必需的,如果我需要将值分成两个不同的数组那么就是这样它,我想把它们放在一起以保持整洁。这是我的意见:

5,4,A
6,3,A
8,7,B
7,6,B
5,2,A
9,7,B

现在我到目前为止的代码通常是我想要它做的,但不是完全

这是我用我的代码设法生成的输出,但这里是我卡住的地方

54A
63A
87B
76B
52A
97B

这里是有趣的部分,我需要取数字和字符值并将它们分开,以便我可以在比较/数学公式中使用它们。

基本上我需要这个

int 5, 4;
char 'A';

但当然存储在它们所在的数组中。 这是我到目前为止提出的代码。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;


public class dataminingp1 
{

    String[] data = new String[100];
    String line;

    public void readf() throws IOException 
    {

        FileReader fr = new FileReader("C:\\input.txt");
        BufferedReader br = new BufferedReader(fr);

        int i = 0;
        while ((line = br.readLine()) != null) 
        {
            data[i] = line;
            System.out.println(data[i]);
            i++;
        }
        br.close();
        System.out.println("Data length: "+data.length);

        String[][] root;

        List<String> lines = Files.readAllLines(Paths.get("input.txt"), StandardCharsets.UTF_8);

        root = new String[lines.size()][];

        lines.removeAll(Arrays.asList("", null)); // <- remove empty lines

        for(int a =0; a<lines.size(); a++)
        {
            root[a] = lines.get(a).split(" ");
        }

        String changedlines;
        for(int c = 0; c < lines.size(); c++)
        {
            changedlines = lines.get(c).replace(',', ' '); // remove all commas
            lines.set(c, changedlines);// Set the 0th index in the lines with the changedLine
            changedlines = lines.get(c).replaceAll(" ", ""); // remove all white/null spaces
            lines.set(c, changedlines);
            changedlines = lines.get(c).trim(); // remove all null spaces before and after the strings
            lines.set(c, changedlines);
            System.out.println(lines.get(c));

        }
    }

    public static void main(String[] args) throws IOException 
    {
        dataminingp1 sarray = new dataminingp1();
        sarray.readf();
    }   
}

我想尽可能轻松地做到这一点,因为我不会与java一起非常远,但我正在学习,如果需要,我可以用一个困难的过程来管理。提前感谢您提供任何帮助。由于其简单性,真正开始喜欢java作为一种语言。

这是我的问题的补充,以消除任何混乱。 我想要做的是获取存储在我在code / input.txt中的字符串数组中的值,并将它们解析为不同的数据类型,如char表示字符,int表示整数。但我不知道目前如何做到这一点,所以我要问的是,有没有办法同时解析这些值而不必将它们分成不同的数组因为我不确定id是怎么做的,因为它会疯狂通过输入文件并找到每个char开始的确切位置以及每个int开始的时间,我希望这会让事情变得清晰。

6 个答案:

答案 0 :(得分:1)

 for(int c = 0; c < lines.size(); c++){
            String[] chars = lines.get(c).split(",");
            String changedLines = "int "+ chars[0] + ", " + chars[1] + ";\nchar '" + chars[0] + "';";
            lines.set(c, changedlines);
            System.out.println(lines.get(c));

        }

答案 1 :(得分:1)

如果您的输入格式是这样的标准化,这很容易。只要你不指定更多(比如一行中可以有3个以上的变量,或者char可以在任何列中,不仅仅是第三个,最简单的方法就是:

    String line = "5,4,A";
    String[] array = line.split(",");
    int a = Integer.valueOf(array[0]);
    int b = Integer.valueOf(array[1]);
    char c = array[2].charAt(0);

答案 2 :(得分:1)

您可以做以下事情:

    int i = 0;
    for (i=0; i<list.get(0).size(); i++) {
        try {
            Integer.parseInt(list.get(0).substring(i, i+1));
            // This is a number
            numbers.add(list.get(0).substring(i, i+1));
        } catch (NumberFormatException e) {
            // This is not a number
            letters.add(list.get(0).substring(i, i+1));
        }
    }

当字符不是数字时,它会抛出NumberFormatException,所以,你知道它是一个字母。

答案 3 :(得分:1)

也许这样的事情有帮助吗?

List<Integer> getIntsFromArray(String[] tokens) {
  List<Integer> ints = new ArrayList<Integer>();
  for (String token : tokens) {
    try {
      ints.add(Integer.parseInt(token));
    } catch (NumberFormatException nfe) {
      // ...
    }
  }
  return ints;
}

这只会占用整数,但也许你可以将它破解一下,做你想做的事:p

答案 4 :(得分:1)

List<String> lines = Files.readAllLines(Paths.get("input.txt"), StandardCharsets.UTF_8);
String[][] root = new String[lines.size()][];

for (int a = 0; a < lines.size(); a++) {
    root[a] = lines.get(a).split(","); // Just changed the split condition to split on comma
}

您的root数组现在拥有2d数组格式的所有数据,其中每行代表输入中的每条记录/行,每列都包含所需的数据(如下所示)。

5   4   A   
6   3   A   
8   7   B   
7   6   B   
5   2   A   
9   7   B

您现在可以遍历数组,您知道每行的前2列是您需要的数字,最后一列是字符。

答案 5 :(得分:1)

使用getNumericValue()isDigit方法尝试这种方式。这可能也有效,

String myStr = "54A";
        boolean checkVal;
        List<Integer> myInt = new ArrayList<Integer>();
        List<Character> myChar = new ArrayList<Character>();
        for (int i = 0; i < myStr.length(); i++) {
            char c = myStr.charAt(i);
            checkVal = Character.isDigit(c);
            if(checkVal == true){
                myInt.add(Character.getNumericValue(c));
            }else{
                myChar.add(c);
            }

        }
        System.out.println(myInt);
        System.out.println(myChar);

同时检查checking character properties