Как объединить строки и целое число в переменную

#android #string #concatenation #string-concatenation

#Android #строка #объединение #строка-конкатенация

Вопрос:

Это действительно глупые вопросы, но я не могу заставить это работать. Я использовал опцию поиска, но не смог не найти свой ответ для Android.

Что я хотел бы сделать, это следующее:

В res/strings.xml у меня есть несколько ниточек

 <string name="good0">blablabla</string>
<string name="good1">balablabla2</string>
etc
  

Я хочу показывать эти строки случайным образом в тех, когда что-то происходит:

 Toast.makeText(this,R.string.good (Math.random()*10), Toast.LENGTH_LONG).show();
  

Но это не работает.

Большое спасибо за вашу помощь!

Комментарии:

1. Почему бы вам не использовать stringArray вместо этого? Это невозможно сделать!

2. Я выберу stringArray, я думаю, что это лучшее решение, чем использование case. Спасибо за ваш ответ!

Ответ №1:

Используйте String Array .

В strings.xml :

 <resources>
    <string-array name="messages">
        <item>blablabla</item>
        <item>blablabla</item>
    </string-array>
</resources>
  

Тогда в коде у вас будет что-то вроде:

 String[] messages = getResources().getStringArray(R.array.messages);
Random r = new Random();
String message = messages[r.nextInt(messages.length)];
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
  

Ответ №2:

R.string.good является int , потому что оно ссылается на ресурс. Этот int ИДЕНТИФИЦИРУЕТ строку в XML-файле. Android предоставляет getString() для своих идентификаторов ресурсов.

Документы Android о строковых ресурсах

Вам нужно будет извлечь строку из файла ресурсов таким образом, затем выполнить конкатенацию в обычном режиме.

Ответ №3:

Вы не можете этого сделать.

Вам придется использовать switch блок.

 String myString;

switch(Math.random() * 10) {
   case 0:
       myString = getString(R.string.good1);
       break;
}

Toast.makeText(this, myString, Toast.LENGTH_LONG).show();
  

Комментарии:

1. Не ожидал, что это невозможно. Но большое спасибо за ваш ответ!

2. R.string.good1 просто добавит значение int в строку. Это не сработает без использования соответствующего getString() вызова.

3. Я не думаю, что это хорошая идея, особенно когда строк много.

Ответ №4:

Если у вас есть несколько строковых значений или целых значений и вы хотите сохранить их в одной строке, то String Builder лучше всего подходит для такого типа операций, например, у вас есть массив строк, и вы хотите сохранить в одной строке, а затем отобразить эту строку, тогда используйте этот метод. это будет работать на сто процентов, и это слишком подходит для такого типа проблем.**

 String my_str=null;
StringBuilder bldr=new StringBuilder();
for(int j=0;j<5;j  )
  bldr.append(phonearray[j]).append(",");
my_str=bldr.toString();
  

здесь, в этом случае, я присваиваю массив phone одной строке и
затем я покажу это и т.д…