Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析字符串数组的双元素_Java - Fatal编程技术网

Java 解析字符串数组的双元素

Java 解析字符串数组的双元素,java,Java,我正试图编写一个Java程序来分析文本文件中字符串数组中的每个字符串,如果数字解析为双精度,程序将打印前面的单词和后面的单词。我似乎不知道如何解析字符串数组的每个元素。目前它只打印第一个数字和后面的单词,而不打印前面的单词。希望有人能帮忙 我的文本文件如下: 假设49个人正在切一块蛋糕,把它分给5个人。我给自己切了一大块,占33.3% 一块蛋糕。现在轮到你切一块蛋糕了。你还会切一块33.3%的蛋糕吗?或者你会吗 公平一点,把剩下的66.6%的蛋糕分成4个均匀的部分?你要切多大的一片 这是我的代码

我正试图编写一个Java程序来分析文本文件中字符串数组中的每个字符串,如果数字解析为双精度,程序将打印前面的单词和后面的单词。我似乎不知道如何解析字符串数组的每个元素。目前它只打印第一个数字和后面的单词,而不打印前面的单词。希望有人能帮忙

我的文本文件如下:

假设49个人正在切一块蛋糕,把它分给5个人。我给自己切了一大块,占33.3% 一块蛋糕。现在轮到你切一块蛋糕了。你还会切一块33.3%的蛋糕吗?或者你会吗 公平一点,把剩下的66.6%的蛋糕分成4个均匀的部分?你要切多大的一片

这是我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.JOptionPane;


public class NumberSearch {

public static void main(String args[]) throws FileNotFoundException {

    //creating File instance to reference text file in Java
//    String filedirect = JOptionPane.showInputDialog(null, "Enter your file"); 
    File text = new File("cakeQuestion2.txt");

    //Creating Scanner instance to read File in Java

    Scanner scnr = new Scanner(text);

    //Reading each line of file using Scanner class
    int lineNumber = 1;
    while(scnr.hasNextLine())
    {

        String line = scnr.nextLine();
        lineNumber++; 

//Finding words


           String[] sp = line.split(" +"); // "+" for multiple spaces

            for (int i = 1; i < sp.length; i++) 

            {
                {

               double d = Double.parseDouble(sp[i]);
//                   System.out.println(+ d);

               if (isDouble(sp[i]))

                {
                    // have to check for ArrayIndexOutOfBoundsException
                    String surr = (i-2 > 0 ? " " + sp[i-2]+" " : "") +
                                  sp[i] +
                                  (i+1 < sp.length ? " "+sp[i+1] : "");


                    System.out.println(surr);
                }

            }}
        }

    }

    public static boolean isDouble( String str )
    {
        try{
            Double.parseDouble( str );
            return true;
        }
        catch( Exception e ){
            return false;
        }}} 
Suppose 49 are
between 5 people.
of 33.3 percent
a 33.3 percent
remaining 66.6 percent
into 4 even
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
导入javax.swing.JOptionPane;
公共类编号搜索{
公共静态void main(字符串args[])引发FileNotFoundException{
//在Java中创建引用文本文件的文件实例
//String filedirect=JOptionPane.showInputDialog(null,“输入文件”);
文件文本=新文件(“cakeQuestion2.txt”);
//在Java中创建扫描仪实例以读取文件
扫描仪编号=新扫描仪(文本);
//使用Scanner类读取文件的每一行
int lineNumber=1;
while(scnr.hasNextLine())
{
String line=scnr.nextLine();
lineNumber++;
//找词
String[]sp=line.split(“+”);/“+”用于多个空格
对于(int i=1;i0?“+sp[i-2]+”“:”)+
sp[i]+
(i+1
Mmmmm。。。您的代码对于任务来说似乎过于冗长和复杂

检查此代码段:

public static void main(String args[]) throws FileNotFoundException {
    String line = "Suppose 49 are slicing a cake to divide it between 5 people. I cut myself a big slice, consisting of 33.3 percent of the whole cake. Now it is your turn to cut a slice of cake. Will you also cut a 33.3 percent slice? Or will you be fairer and divide the remaining 66.6 percent of the cake into 4 even parts? How big a slice will you cut?";
    String[] sp = line.split(" +"); // "+" for multiple spaces
    final String SPACE = " "; 

    // loop over the data
    for (int i = 0; i < sp.length; i++) {
        try {
            // if exception is not raised, IS A DOUBLE!
            Double.parseDouble(sp[i]);

            // if is not first position print previous word (avoid negative index)
            if (i > 0)
                System.out.print(sp[i - 1] + SPACE);

            // print number itself
            System.out.print(sp[i] + SPACE);

            // if is not last position print previous word (avoid IOOBE)
            if (i < sp.length - 1)
                System.out.print(sp[i + 1]);

            // next line!
            System.out.println();
        } catch (NumberFormatException ex) {
            // if is not a number, not our problem!
        }
    }
}

我认为使用try-catch将是一项昂贵的操作。跟着这个。使用
regex
将更加优雅。
stringsurr=(i-2>0?“+sp[i-2]+”:”)+sp[i]+(i+1三元运算符的目的是帮助提高可读性。您需要使用StringBuilder将其分解为单独的位,因为它不是那么容易阅读。我看到的一个明显错误是for循环条件。您需要以int i=0开始循环
parseDouble
不是enugh,因为20将解析为double,但它是一个整数而不是double,可以使用Seal建议的正则表达式,也可以使用不同的方法。还有一件事,索引代码的检查很难看,+1表示指南针,我认为
i-2
应该是
i-1
,因为你可能是指上一个单词,它是1步而不是2步,对吗?@vinay是的,现在我知道op为什么用i-2表示上一个单词了?!for循环应该从0开始?@Ma3x如果第一个单词是45.6怎么办?它仍然是额外的工作吗?在这种情况下是额外的迭代,如果数据是动态检索的,则是。
Double.parseDouble(sp[i])还不够吗<代码>Double.parseDouble(30)将通过,但它不是双重的?@GavinColl你解决了你的问题??只要你从来没有标记一个答案,如你所接受的,你必须知道这个或任何答案已经解决了你的问题,请考虑通过点击复选标记接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。