Как я применяю цикл foreach к каждому символу в Строке?

Вы хотите использовать традиционный цикл for, чтобы вы могли использовать индекс для привязки к вашему List<T> в модели, вам также нужно будет сделать items изменяемым, поэтому вам нужно иметь set ] для этого также, иначе вы не сможете ничего отправить:

//You'll need to make this mutable, so it can post the edited values
public List<Items> items { get; set; } = new List<Items>();

Тогда в вашем представлении:

@for(int i = 0; i < Model.items.Count; i++)
{
   @Html.HiddenFor(x => Model.items[i].ItemId)
   @Html.HiddenFor(x => Model.items[i].ItemCode)
   <tr class="shoppingCartRow" id="@Model.items[i].ItemId">
     <td class="cart-img nostretch">
       <a href="#"><img src="@Model.items[i].ImageUrl" alt=""></a>
     </td>
   </tr>
   <tr>
     <td>
       @Html.TextboxFor(x=> Model.items[i].PersonalizedName, new { @placeholder = "Personalized Name"})
     </td>
   </tr>
   <tr>
     <td>
       @Html.TextboxFor(x=> Model.items[i].Country, new { @placeholder = "Country"})
     </td>
   </tr>
}
172
задан Lyndon White 23 February 2014 в 22:49
поделиться

4 ответа

Самый простой способ для каждого char в String - использовать toCharArray () :

for (char ch: "xyz".toCharArray()) {
}

Это дает вам краткость для -Каждая конструкция, но, к сожалению, String (которая является неизменной) должна выполнять защитную копию, чтобы сгенерировать char [] (которая является изменяемой), поэтому есть некоторая потеря стоимости.

Из документации :

[ toCharArray () возвращает] вновь выделенный символьный массив , длина которого равна длине этой строки, и чье содержимое инициализировано, чтобы содержать последовательность символов, представленную этой строкой.

Есть более подробные способы перебора символов в массиве (обычный цикл for, CharacterIterator и т. Д.), Но если вы готовы заплатить toCharArray () за -каждый самый лаконичный.

310
ответ дан 23 November 2019 в 20:39
поделиться

К сожалению, Java не делает String реализация Iterable<Character>. Это могло легко быть сделано. Существует StringCharacterIterator, но это даже не реализует Iterator... Поэтому сделайте свое собственное:

public class CharSequenceCharacterIterable implements Iterable<Character> {
    private CharSequence cs;

    public CharSequenceCharacterIterable(CharSequence cs) {
        this.cs = cs;
    }

    @Override
    public Iterator<Character> iterator() {
        return new Iterator<Character>() {
            private int index = 0;

            @Override
            public boolean hasNext() {
                return index < cs.length();
            }

            @Override
            public Character next() {
                return cs.charAt(index++);
            }
        };
    }
}

Теперь можно (несколько) легко работать for (char c : new CharSequenceCharacterIterable("xyz"))...

3
ответ дан 23 November 2019 в 20:39
поделиться

Вам необходимо преобразовать объект String в массив символов с помощью метода toCharArray () класса String:

String str = "xyz";
char arr[] = str.toCharArray(); // convert the String object to array of char

// iterate over the array using the for-each loop.       
for(char c: arr){
    System.out.println(c);
}
5
ответ дан 23 November 2019 в 20:39
поделиться
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
   char c = s.charAt(i);
}

47
ответ дан 23 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: