Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_String - Fatal编程技术网

Java 从字符串中提取字符并按类型放入特定数组

Java 从字符串中提取字符并按类型放入特定数组,java,arrays,string,Java,Arrays,String,我是Java新手,所以我尝试编写随机程序来解决这个问题。我正试图写一些东西,用一个二次方程作为用户输入,比如:x^2+3x-1 也许这太高级了(也许不是),但我想知道如何在循环中一个接一个地提取字符。如果都是数字,我想我可以使用.isDigit()并将它们保存到一个数组中,但因为它们是不同的数据类型,我不确定如何执行此操作。到目前为止,我的“代码”是这样的 import java.lang.String; import java.lang.StringBuffer; import java.ut

我是Java新手,所以我尝试编写随机程序来解决这个问题。我正试图写一些东西,用一个二次方程作为用户输入,比如:
x^2+3x-1

也许这太高级了(也许不是),但我想知道如何在循环中一个接一个地提取字符。如果都是数字,我想我可以使用
.isDigit()
并将它们保存到一个数组中,但因为它们是不同的数据类型,我不确定如何执行此操作。到目前为止,我的“代码”是这样的

import java.lang.String;
import java.lang.StringBuffer;
import java.util.Scanner;
import java.lang.Character;

public class Lab
{
    public static void main(String[] args)
    {
        Scanner user_input = new Scanner(System.in);
        System.out.print("Please input the quadratic equation (ex: 2x^2 + 3x - 2): ");

        String request = user_input.nextLine();
            int myArr[];
        String lettArr[];
        for (int i = 0; i <= request.length(); i++)
        {
            String c = request.charAt(i);

            if (request.isDigit(c))
            {
                myArr[1] += c;
            }
            if(request.isLowerCase(c))
            {
                lettArr[1] += c;
            }
        }
        System.out.println(myArr[0]);
    }
}
import java.lang.String;
导入java.lang.StringBuffer;
导入java.util.Scanner;
导入java.lang.Character;
公共班级实验室
{
公共静态void main(字符串[]args)
{
扫描仪用户输入=新扫描仪(System.in);
系统输出打印(“请输入二次方程(ex:2x^2+3x-2):”;
String request=user_input.nextLine();
int myArr[];
字符串Lettar[];

对于(int i=0;i我想你要做的是从用户输入中提取系数。你的方法可能会起作用,但是会有很多情况你必须考虑(+ /符号),而不是尝试java的正则表达式< /p>。
String input = "2x^2 - 4x + 1";
input = input.replaceAll("\\s", ""); //removes  all whitespaces

Pattern p = Pattern.compile("(-?\\d+)x\\^2((\\+|-)\\d+)x((\\+|-)\\d+)");
Matcher m = p.matcher(input);

if (!m.matches()) {
    System.out.println("Incorrect input");
    return;
}

int a, b, c;
a = Integer.parseInt(m.group(1));
b = Integer.parseInt(m.group(2));
c = Integer.parseInt(m.group(4));

System.out.println(String.format("a=%d, b=%d, c=%d", a, b, c));

您可以修改此片段并在代码中使用它。但是,我假设您的系数是整数。如果您需要它们,则必须更改给定正则表达式的格式,并将
integer.parseInt
更改为
double.parseDouble
。如果你很感兴趣。

你的代码有一些地方不对劲:

public class Lab
{
    public static void main(String[] args)
    {
        Scanner user_input = new Scanner(System.in);
        System.out.print("Please input the quadratic equation (ex: 2x^2 + 3x - 2): ");

        String request = user_input.nextLine();
        int myArr[];        //not initialized
        String lettArr[];   //should be a character type & not initialized
        for (int i = 0; i <= request.length(); i++)
        {
            String c = request.charAt(i); // returns a char

            if (request.isDigit(c))
            {
                myArr[1] += c;  // not right, myArr is ints and c is a char
            }
            if(request.isLowerCase(c))
            {
                lettArr[1] += c; // not right
            }
        }
        System.out.println(myArr[0]); //only prints one char (you might want this
     }
 }
myArr是一个整数数组,c是一个字符。在java中你不能这样做。此外,你正在尝试将一个字符添加到一个int中,而int在一开始就没有初始化!!数组中所有内容的类型都必须相同。当涉及到继承之类的问题时,这会变得更加复杂,但现在只知道你不能这样做。如果你需要可以使用的字符的整数值:

Integer.parseInt(c)
我不确定你想对你的声明做什么,但我90%确定它并不是想做你想做的事。仅供参考:

myCharArr[i] = c;
将第i个元素(从0开始)指定给c的值。因此,如果i=1且myCharArr被初始化为3个元素长,则如下所示:

[ ? | c | ?]
where?只是一个垃圾值

二,。 在java中,您需要初始化数组,或使用更具动态性的列表对象。基本数组的问题是它们的大小不能更改,即当初始化基本数组时:

int arr[] = new int[5];
它保持相同的大小(在本例中为5)。如果使用类似ArrayList的内容,则可以添加任意数量的内容。初始化ArrayList的方法如下:

ArrayList<Integer> intArr = new ArrayList<Integer>();
ArrayList<Character> charArr = new ArrayList<Character();
您可以使用基本数组来解决此问题,但如果使用列表,则会节省一些麻烦

仔细阅读数组

ArrayList<Integer> intArr = new ArrayList<Integer>();
ArrayList<Character> charArr = new ArrayList<Character();
intArr.add(someInt);  
charArr.add(someChar);