Преобразование ArrayList of Char в другой ArrayList из Int - PullRequest
0 голосов
/ 05 марта 2012

Это беспокоило меня в течение последнего часа, и я чувствую, что у меня ничего не получается.

У меня есть ArrayList символов, и мне нужно преобразовать числовые символы в целые числа и поместить его в новый массив. Итак:

ArrayList<Character> charList contains [5, ,1,5, ,7, ,1,1]

Я хотел бы взять текущий charList и поместить содержимое в новый ArrayList типа Integer, который, очевидно, не будет содержать пробелы.

ArrayList<Integer> intList contains [5, 15, 7, 11]

Любая помощь сейчас будет принята с благодарностью.

Ответы [ 8 ]

3 голосов
/ 05 марта 2012

Сначала сделайте String из символов в вашем charList, затем разбейте эту строку на пробел и, наконец, проанализируйте каждый токен в int, например:

char[] chars = new char[charList.size()];
charList.toArray(chars);
String s = new String(chars);
String[] tok = s.split(" ");
ArrayList<Integer> res = new ArrayList<Integer>();
for (String t : tok) {
    res.add(Integer.parseInt(t));
}
0 голосов
/ 13 апреля 2017

С помощью Java8 вы можете преобразовать его следующим образом:

String str = charList.stream().map(Object::toString).collect(Collectors.joining());
ArrayList<Integer> intList = Arrays.asList(str.split(" ")).stream().map(Integer::parseInt)
                                   .collect(Collectors.toCollection(ArrayList::new));

Сначала мы собираем символы, разделенные символом ',' в строку, затем разделяем ее на список чисел (какStrings) и из потока этих фильтров мы анализируем каждую String в int и собираем их в новый список.

0 голосов
/ 05 марта 2012

вот еще один .... без разбора

        char[] charList = "5 15 7 11 1234 34 55".Trim().ToCharArray();
        List<int> intList = new List<int>();
        int n = 0;
        for(int i=0; i<charList.Length; i++)
        {
            if (charList[i] == ' ')
            {
                intList.Add(n);
                n = 0;
            }
            else
            {
                n = n * 10;
                int k = (int)(charList[i] - '0');
                n += k;
            }
        }
0 голосов
/ 05 марта 2012

Перебрать список символов, разобрать их в целые числа и добавить в список целых. Вы должны быть осторожны с NumberFormatException. Вот полностью рабочий код для вас:

Character[] chars = new Character[]{'5',' ','1','5',' ','7',' ','1','1'};
List<Character> charList = Arrays.asList(chars);
ArrayList<Integer> intList = new ArrayList<Integer>();

for(Character ch : charList)
{
    try
    { intList.add(Integer.parseInt(ch + "")); }
    catch(NumberFormatException e){}
}

Если вы уже заполнили свой список символов, вы можете пропустить первые 2 строки кода выше.

0 голосов
/ 05 марта 2012
public static List<Integer> getIntList(List<Character> cs) {
  StringBuilder buf = new StringBuilder();
  List<Integer> is = new ArrayList<Integer>();
  for (Character c : cs) {
    if (c.equals(' ')) {
      is.add(Integer.parseInt(buf.toString()));
      buf = new StringBuilder();
    } else {
      buf.append(String.valueOf(c));
    }
  }
  is.add(Integer.parseInt(buf.toString()));
  return is;
}


List<Character> cs = Arrays.asList('5', ' ', '1', '5', ' ', '7', ' ', '1', '1');
List<Integer> is = getIntList(cs); // => [5, 15, 7, 11]
0 голосов
/ 05 марта 2012

Пройдите по массиву символов, если вы видите

  • число: добавьте его к строке (строитель)
  • пробел: анализ текущей строки (строитель)

Вот тривиальная реализация:

StringBuilder sb = new StringBuilder();
List<Character> charList = getData();  // get Values from somewhere
List<Integer> intList = new ArrayList<Integer>();

for (char c:charList) {
  if (c != ' ') {
     sb.append(c);
  } else {
     intList.add(Integer.parseInt(sb.toString());
     sb = new StringBuilder();
  }
}
0 голосов
/ 05 марта 2012

Вы хотите изменить каждый отдельный символ на соответствующее ему целое число?

Если есть, то

Integer.parseInt(String)

, который преобразует строку в int и

Character.toString(char)

, который преобразует символ в строку

Если вы хотите преобразовать несколько символов в одно целое число, вы можете преобразовать все символы по отдельности, а затем сделать что-то подобное

int tens = Integer.parseInt(Character.toString(charList.get(i)));
int ones = Integer.parseInt((Character.toString(charList.get(i+1)));
int value = tens * 10 + ones;
intList.add(i, value);
0 голосов
/ 05 марта 2012
for(Character ch : charList) {
    int x = Character.digit(ch, 10);
    if (x != -1) {
         intList.add(x);
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...