如何在JAVA中按新行拆分字符串?

如何在JAVA中按新行拆分字符串?,java,split,inputstream,Java,Split,Inputstream,我想在Java中按新行拆分字符串。我使用以下正则表达式- str.split("\\r|\\n|\\r\\n"); 但它仍然并没有用新行分割字符串。 输入- Output=String[]array={“0000”}而我想要的是String[]array={“0”、“0”、“0”、“0”}。 我读过关于堆栈溢出的各种解决方案,但没有一种适合我 代码是- import java.io.BufferedReader; import java.io.IOException; import j

我想在Java中按新行拆分字符串。我使用以下正则表达式-

str.split("\\r|\\n|\\r\\n");
但它仍然并没有用新行分割字符串。 输入-

Output=String[]array={“0000”}而我想要的是String[]array={“0”、“0”、“0”、“0”}。 我读过关于堆栈溢出的各种解决方案,但没有一种适合我

代码是-

    import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;


public class Input {

    public static void main(String[] args) {

         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         String line;
         String text = "";
         try {
            while((line=br.readLine())!=null){
                text = text + line; 
             }
        } catch (IOException e) {
            e.printStackTrace();
        }


         String [] textarray = text.trim().split("[\\r\\n]+");

       for(int j=0;j<textarray.length;j++)
         System.out.println(textarray[j]);
//         System.out.print("");
//         for(int i=((textarray.length)-1);i>=0;i--){
//           long k = Long.valueOf(textarray[i]).longValue();
//           System.out.println(k);
////             double sqrt = Math.sqrt(k);
////             double value = Double.parseDouble(new DecimalFormat("##.####").format(sqrt));
////             System.out.println(value);
////             
////        }

    }
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.text.DecimalFormat;
公共类输入{
公共静态void main(字符串[]args){
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
弦线;
字符串文本=”;
试一试{
而((line=br.readLine())!=null){
文本=文本+行;
}
}捕获(IOE异常){
e、 printStackTrace();
}
字符串[]textarray=text.trim().split([\\r\\n]+”);
对于(int j=0;j=0;i--){
//long k=long.valueOf(textary[i]).longValue();
//系统输出println(k);
////双sqrt=数学sqrt(k);
////double value=double.parseDouble(新的十进制格式(“sqrt”);
////系统输出打印项次(值);
////             
////        }
}
更新的答案: 如果您正在从键盘读取
inputstream
,则可能无法正确地将\n输入数据。在这种情况下,您可能需要选择一个新的sentinel值

原始答复: 我认为您需要创建一个sentinel值。因此,如果
\n
是您的sentinel值,您可以这样做:

  • inputstream
    加载到
    string
    变量中
  • 逐个字符检查
    字符串
    变量,查看
    \n
    是否在输入中(您可以使用
    for循环
    子字符串(i,i+2)
  • 如果找到它,则可以将其添加到数组中

  • 调用
    br.readLine()
    时,换行符将从字符串末尾剥离。因此,如果键入
    0+ENTER
    四次,则尝试拆分字符串
    “0000”


    您最好从stdin中读取项目并将其存储在可扩展的数据结构中,例如
    列表
    。如果您已经单独读取了项目,则无需拆分它们。

    请提供重现该问题的示例代码。我尝试了针对
    字符串输入=“0\n0\n0\n0”的模式
    ,它工作正常。你能提供你的代码吗?是的,你提供了代码。你对
    split()
    方法的输入是
    “0000”
    ,因此这也是你以后得到的。你能不能也发布造成问题的用户的确切输入?
        import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.text.DecimalFormat;
    
    
    public class Input {
    
        public static void main(String[] args) {
    
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
             String line;
             String text = "";
             try {
                while((line=br.readLine())!=null){
                    text = text + line; 
                 }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
             String [] textarray = text.trim().split("[\\r\\n]+");
    
           for(int j=0;j<textarray.length;j++)
             System.out.println(textarray[j]);
    //         System.out.print("");
    //         for(int i=((textarray.length)-1);i>=0;i--){
    //           long k = Long.valueOf(textarray[i]).longValue();
    //           System.out.println(k);
    ////             double sqrt = Math.sqrt(k);
    ////             double value = Double.parseDouble(new DecimalFormat("##.####").format(sqrt));
    ////             System.out.println(value);
    ////             
    ////        }
    
        }