Это пример кода для извлечения всего текста между '[' и ']' и сохранения его 2 отдельных массивов (т.е. текст внутри скобок в одном массиве и текст вне скобок в другом массиве)
function extract_text($string)
{
$text_outside=array();
$text_inside=array();
$t="";
for($i=0;$i<strlen($string);$i++)
{
if($string[$i]=='[')
{
$text_outside[]=$t;
$t="";
$t1="";
$i++;
while($string[$i]!=']')
{
$t1.=$string[$i];
$i++;
}
$text_inside[] = $t1;
}
else {
if($string[$i]!=']')
$t.=$string[$i];
else {
continue;
}
}
}
if($t!="")
$text_outside[]=$t;
var_dump($text_outside);
echo "\n\n";
var_dump($text_inside);
}
Вывод: extract_text («привет, как дела?»); будет генерировать:
array(1) {
[0]=>
string(18) "hello how are you?"
}
array(0) {
}
extract_text («привет [http://www.google.com/test.mp3] как вы?»); будет производить
array(2) {
[0]=>
string(6) "hello "
[1]=>
string(13) " how are you?"
}
array(1) {
[0]=>
string(30) "http://www.google.com/test.mp3"
}
@krupesh Anadkat Я, как новичок, разочарован, но @CommonsWare - опытный разработчик, который был в игре уже несколько дней.
Следуйте его советам и убедитесь, что вы изучили основные принципы, которые он обрисовал, а не прорвались или просто торопились что-то построить ради этого.
Тем не менее, сегодня ваш счастливый день, поэтому я побалую вас некоторыми фрагментами кода (нам, тысячелетним программистам, это легко - да, я сказал это !!!), читайте о детях и учитесь.
Проблема, с которой вы здесь сталкиваетесь, заключается в изменении конфигурации устройства .
В вашем случае ориентация экрана изменится.
Каждый раз, когда пользователь поворачивает этот экран, Android OS воссоздает вашу активность по-новому. Android OS означает, что нет ничего плохого в том, что она просто пытается быть эффективной, поскольку она проверяет, есть ли лучшие ресурсы для этой новой ориентации, и если да, то может использовать их вместо этого.
Это источник твоей боли. Теперь давай взломаем и поможем тебе, приятель.
Вы можете использовать методы класса Activity , чтобы выбраться из этого. До того как всемогущая ОС Android убьет вашу активность, в жизненном цикле вашей деятельности будет вызван метод onSaveInstanceState () . В вашем классе вы переопределяете onSaveInstanceState () и сохраняете нужные данные в Bundle , который onSaveInstanceState () принимает в качестве аргумента.
Затем в функции onCreate () вашей активности вы проверяете, не является ли saveInstanceState нулевым, если оно не равно нулю, вы получаете свои данные.
1111 Осторожно, хотя; Лучше всего сохранить примитивные типы данных в Bundle или объекты, которые сериализуемы , чтобы избежать извлечения данных, которые устарели, то есть устарели или больше не действительны. [ 1111]См. Фрагмент кода для моей активности SaveDataAcrossScreenOrientation ниже
package com.demo.android.savedataacrossscreenrotationdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class SaveDataAcrossScreenOrientation extends AppCompatActivity {
// Key to be used for the key: value pair to be saved to the bundle
private static final String KEY_GREETING_TEXT = "greeting_text";
// The text currently displayed to the screen
private String mCurrentDisplayedText;
private TextView mGreetingTextView;
private Button mSpanishButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get references to the button and textview
mGreetingTextView = (TextView) findViewById(R.id.greeting_text_view);
mSpanishButton = (Button) findViewById(R.id.change_greeting_button);
// If mCurrentDisplayedText is inside the bundle retrieve and display it on screen
if(savedInstanceState != null) {
mCurrentDisplayedText = savedInstanceState.getString(KEY_GREETING_TEXT, "");
if (mCurrentDisplayedText != "") {
mGreetingTextView.setText(mCurrentDisplayedText);
}
}
// Set a listener on the spanish button
mSpanishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Change the english text to spanish when the button is clicked
mGreetingTextView.setText(R.string.spanish_greeting);
// Get the text currently shown in the text view
mCurrentDisplayedText = (String) mGreetingTextView.getText(); // Calling getText() returns a CharSequence cast it to a string
}
});
}
// Override onSaveInstanceState(Bundle savedInstanceState) and save mCurrentDisplayedText to the bundle
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString(KEY_GREETING_TEXT, mCurrentDisplayedText);
}
}
Смотрите демонстрацию видео здесь
Веселитесь!