在字符串的特定位置查找字符

Finding character at particular location of String

提问人:Super Coder 提问时间:5/18/2023 最后编辑:Super Coder 更新时间:5/18/2023 访问量:74

问:

作为二项式扩展程序的一部分,我在输入的数字 + 变量上创建了一个 Scanner 类 (),在第一个a in (a+b)n 上创建了另一个 () 类scscan)

这是我到目前为止的程序:

import java.util.* ;
public class binomial_expansion
{
    public static long factorial(long x)
    {
        long xf = x ;
        for(long i = 1; i<=x ; i++)
        {
            xf*=i ;
        }
        return xf ;
    }
    
    public static double C(long n, long r)
    {
        double c = factorial(n)/(factorial(n-r)*factorial(r)) ;
        return c ;
    }
    
    public static void main()
    {
        Scanner sc = new Scanner(System.in) ;
        boolean error = false ;
        String a = "" ;
        do {
            if(error)
            {
                System.out.println("Error; Please try again") ;
                error = false ;
            }
            System.out.println("Enter a (separate single variable with space) : ") ;
            a = sc.nextLine() ;
            if(a=="") error = true ;
        } while(error) ;
        
        sc.close() ;
        Scanner scan = new Scanner(a) ;
        long x = scan.nextLong() ;
        long x1 = scan.next().charAt(0) ;
    }
}

使用“.next().charAt(index)”创建字符变量的问题在于字符串中不知道字符(单个变量)的索引号(整数的长度未知),并且必须省略用户输入的空格以分隔整数文本和字符文本。如何制作包含个位变量的字符变量?
java.util.scanner charat 二项式定理

评论

0赞 khelwood 5/18/2023
我不明白你的变量的目的,它只设置为 false。error
0赞 f1sh 5/18/2023
将输入保存到字符串中,使用正则表达式对其进行解析,并将各个元素捕获到组中。您期望什么确切的输入?
0赞 Reilas 5/18/2023
为了澄清您的问题,您要求用户只输入 1 个字符和 1 个数字?
0赞 Super Coder 5/18/2023
@khelwood它没有被正确复制,请等待
0赞 John Bayko 5/18/2023
第一个问题,你使用参数作为限制,但在循环中你正在更改 。 将比 增加得更快,并且循环将不起作用。使用另一个变量(例如)作为返回值,并声明您的参数以确保它不会被更改。xfor(long i = 1; i<=x ; i++)x*=ixivar xf = xfinal long x

答:

1赞 JustaNobody 5/18/2023 #1

您可以读取一个字符串,然后使用 stringtokenizer 用黑色空格分隔。然后使用 nextToken() 分别获取整数和变量。

Long.parseLong()将字符串转换为长整型

import java.util.*;
class test{
    public static void main(String args[]){
        String str = "12 w";
        StringTokenizer st = new StringTokenizer(str," ");
        int x = Integer.parseInt(st.nextToken());
        str=st.nextToken();
        System.out.println(str+"-"+x);
    }
}

这里我用的是int,你也可以用long

评论

1赞 Super Coder 5/18/2023
是的,StringTokeniser 类可以在这里使用,也可以使用 sc.substring
2赞 user16320675 5/18/2023
更喜欢一个而不是 - 它用空格分隔,也可以解析整数(并且更新一点,或者不那么旧)ScannerStringTokenizer
0赞 JustaNobody 5/19/2023
@user16320675是的,使用分隔符可以很好地替换 stringtokenizer
1赞 Reilas 5/18/2023 #2

你只需要一个来获取输入,你用 .Scannera = sc.nextLine()

从那里,找到空间的索引,并使用该方法派生每个值。String.substring

Scanner sc = new Scanner(System.in) ;
boolean error = false ;
String a = "" ;
do {
    if(error)
    {
        System.out.println("Error; Please try again") ;
        error = false ;
    }
    System.out.println("Enter a (separate single variable with space) : ") ;
    a = sc.nextLine() ;
} while(error) ;

sc.close() ;

int indexOf = a.indexOf(' ');
long number = Long.parseLong(a.substring(0, indexOf));
char variable = a.charAt(indexOf + 1);

评论

1赞 user16320675 5/18/2023
a.substring(indexOf + 1).charAt(0)将与 - 只是创建了更多的方法调用和中间体 ||在生产代码中,您还将检查是否不是...a.charAt(indexOf + 1)StringindexOf-1
0赞 Reilas 5/18/2023
@user16320675,你说得对,我忽略了这一点。我对我的答案进行了更改。