在Android中输入多行文本中的数组

时间:2017-12-07 20:15:56

标签: android arrays loops for-loop output

我是Android的新手,我正在尝试创建一个应用程序,其中用户在inputType = textMultiLine的文本框中输入数组。问题是我希望这样做,以便每当用户点击进入时,应用程序接受下一个数组元素的输入,而不是将文本框中的整个文本视为一个元素。代码如下:

    EditText input = findViewById(R.id.inputtext);
    Button show = findViewById(R.id.button);
    TextView output = findViewById(R.id.output);
    String [] name = new String[3];

    for (int i = 0 ; i < 3 ; i++)
    {
        name[i] = input.getText().toString();
        output.setText(name[i]);
    }

但是每当我在点击输入后尝试取名[1]时,app不会将下一行视为名称[2],而是将其视为名称[1]。例如,如果键入名称john,steve和frank,那么我应该得到一个这样的数组:

name[0] = john
name[1] = steve
name[2] = frank

但是每当我输入john时,按回车,键入steve,按回车键并输入frank,app将其视为:

name[0] = john
          steve
          frank

如果我将输出设置为这样:

output.setText(name[i] + i)

而不是得到这样的结果:

john 0
steve 1
frank 2

我得到这样的输出:

john
steve
frank2

非常感谢任何和所有帮助。

由于

=============================================== ================================================== ================================================== ===

编辑1

我尝试了这段代码,但没有用:

String name[] = input .getText().toString().split("\\r?\\n");

for (int i = 0 ; i < name.length; i++)
{

    output.setText(name[i]);
}

当我输入john,steve和frank

时,仍然只是坦率地说

3 个答案:

答案 0 :(得分:0)

如果要将每一行放入不同的数组项:

String [] name = input.getText().toString().split("\n");

input.getText().toString()为您提供包含整个 EditText 内容的字符串,其中的行以新行分隔 - “\ n”。您需要拆分此字符串以获取每一行。

答案 1 :(得分:0)

尝试以下代码

 String name[] = input .getText().toString().split("\\r?\\n");
 String disp="";
 for (int i = 0 ; i < name.length; i++)
    {
        disp += name[i] +"\n";

    }
 output.setText(disp);

答案 2 :(得分:0)

以下示例可能会有用:

XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <EditText
        android:id="@+id/edit_text"
        style="@style/Widget.AppCompat.EditText"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="100dp"
        android:inputType="textMultiLine"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show"/>

    <TextView
        android:id="@+id/text_view"
        style="@style/Widget.AppCompat.EditText"
        android:layout_width="300dp"
        android:layout_height="wrap_content"/>

</LinearLayout>

Java代码

final EditText input = findViewById(R.id.edit_text);
        final Button show = findViewById(R.id.button);
        final TextView output = findViewById(R.id.text_view);

        show.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(final View view) {
                final String inputString = input.getText().toString();
                if (!TextUtils.isEmpty(inputString)) {
                    final String newLine = System.getProperty("line.separator");
                    final String[] inputText = inputString.split(newLine);

                    String outputText = "";
                    for (int i = 0; i < inputText.length; i++) {
                        outputText += inputText[i];
                        if (i != inputText.length - 1) {
                            outputText += newLine;
                        }
                    }
                    output.setText(outputText);
                }
            }
        });
    }

enter image description here

You can download de APK herehere the complete source code

(另一种方式:简单!)在下面的代码中,没有必要对输入文本进行拆分。

    final EditText input = findViewById(R.id.edit_text);
    final Button show = findViewById(R.id.button);
    final TextView output = findViewById(R.id.text_view);

    show.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(final View view) {
            final String inputString = input.getText().toString();
            if (!TextUtils.isEmpty(inputString)) {
                output.setText(inputString);
            }
        }
    });

请注意,您的代码是错误的,因为在每个循环中,您都会覆盖在上一个循环中设置的文本。