2013-11-20 3 views
1

У меня есть список элементов, которые содержат, например, abc. Чтобы создать документ aXbc, я вставляю X в позицию 1. Однако список принимает abc как один элемент, поэтому позиция 1 находится в действительной позиции 4 в содержании моего списка. Итак, мой вопрос: как я могу вставить в середине этого списка и произвести aXbc напрямую? конечно, я могу просматривать список и concat каждый элемент ...! но нет в java структуры, которая делает это напрямую?Вставить в середине списка

list.add("abc"); 
list.add(1, "X"); 

Хотите aXbc

+0

Вы пытаетесь вставить середину строки. – Masudul

+0

Можете ли вы дать более сложный пример, описывающий состояние списка до и после операции вставки? – isnot2bad

ответ

1

У вас есть список строк. Следует иметь в виду, что String неизменен: как только он существует, вы не можете его изменить, вы можете только перезаписать его новым значением.

Лучший курс действий было бы создать новую строку:

String value = "abc"; 
StringBuilder sb = new StringBuilder(); 

sb.append(value.subString(0, 1)); 
sb.append("X"); 
sb.append(value.subString(1, value.length())); 

Если вы действительно хотите использовать список:

public static void main(String[] args) { 
    String value = "abc"; 

    List<Character> characters = new ArrayList<Character>(); 
    for(char c : value.toCharArray()){ 
     characters.add(c); 
    } 

    characters.add(1, 'X'); 
    System.out.println(characters); 

    StringBuilder sb = new StringBuilder(); 
    for(char c : characters){ 
     sb.append(c); 
    } 

    System.out.println(sb.toString()); 
} 

Выход:

[а , X, b, c]
aXbc

Это создаст новый список символов на основе символов в данной строке.

1

Вы путаете элементы в List и символы в виде String. Если вы хотите вставить символы или строки в середине другой строки, используйте StringBuilder.

Конечно, вы можете создать Список Characters, если вы настроены на использование List.

+2

Он не путает их --- он спрашивает *, как заставить его работать без ручного повторения и согласования каждого элемента. –

+0

Хорошо, Марко, он говорит: «Однако, список возьмет abc как один элемент, поэтому позиция 1 находится в реальности в позиции 4 в содержании моего списка». и это звучит для меня как путаница в том, что такое Списки. – Kayaman

+0

Он также говорит: «Конечно, я могу просматривать список и конкатрировать каждый элемент ...! Но нет в java структуры, которая делает это напрямую?» который звучит для меня так, как будто он знает, о чем говорит, даже если он не проявил себя самым ясным образом. –

0

Вам нужно что-то вроде

list.add(1, new StringBuilder(list.get(1)).insert(somePosition, "someString").toString()); 

Это означает, что получение строки в позиции списка и вставить некоторую строку в нужном положении, и положить его обратно в том же position.

0

Вам нужен list.set(index,Element) метод. add метод добавит новый элемент в List.

list.set(1, new StringBuilder(list.get(1)).insert(1, "X").toString()); 
0

Вам нужен специализированный список строк, который позволяет преобразовывать все элементы, вставляя в них символы.

Существует определенно нет класса Java с таким специализированным поведением, и я также ничего не слышал о хорошо известных публичных библиотеках.

Ближайшее совпадение с тем, что вы ищете, будет функционально-ориентированным API, который позволит преобразовать map список с функцией преобразования, преобразующей входную строку в строку вывода путем вставки символов.

Библиотека Google Guava поддерживает такие функционально-ориентированные операции с списками.Кроме того, проверьте уже стабильный Java 8 Early Access, который имеет этот встроенный модуль.

0

это нравится.

int index= list.indexOf("abc"); // Getting the position of the object. 
if(index != -1){  
    String newString = new StringBuffer("abc").insert(1,"X").toString();// Modifying the object 
    list.set(index, newString); //Updating the object in same position. 
} 
+1

Пожалуйста, объясните, почему ваш ответ будет работать, чтобы другие могли узнать из вашего ответа. – ArtB

Смежные вопросы