Java入力と判断,Scannerとsplitの使い方
1741 ワード
今日は問題を1つ入力するのが難しい.
arr = {1, 2 , 3},1979
以上の文を入力することを意味し、1,2,3はint配列であり、1979はint変数である.2つの方法があります hasNextInt():失敗しました.arrの先頭のためfalse に直接戻ったようです. input.nextLine()は行全体を取り、splitを使用して最終的に成功しなかった.str自体の値がintタイプであるかどうかをどのように判断するか分からないからだ.ここで少しPython脳の影響を受けて、いつも input.nextLine()は行全体を取り、splitを使用し、 ステップ1を経て、戻り値をString配列に割り当てます. 反復配列の各要素は、単純な正規表現
正規表現は本当に使いやすいです.しかし、問題はいつも間違っていることです.基本的な構文と基本的な文をここに記録します.
#* + ? 「ab*」:1つの文字列に1つのaの後に0つまたは複数のbが続くことを示す.「a」、「ab」、「abbb」、......「ab+」:1つの文字列に1つのaの後ろに少なくとも1つのb以上が付いていることを示す.「ab」、「abbb」......「ab?」:1つの文字列に1つのaの後ろに0つまたは1つのbがついていることを表す.“a”, "ab"
\s\S
s空白文字(スペース、リターン、タブ、改ページなど)
S空白以外の文字.それはs以外のすべてです
1数字:1*$
2 nビットの数字:^d{n}$
3少なくともnビットの数字:^d{n,}$
4 m-nビットの数字:^d{m,n}$
5ゼロとゼロ以外の先頭の数字:^(0|[1-9][0-9]*)$
0-9 ↩︎
arr = {1, 2 , 3},1979
以上の文を入力することを意味し、1,2,3はint配列であり、1979はint変数である.2つの方法があります
type()
関数で解決したいと思っています.その後、いろいろ探して、経験をまとめました.=|,|\\{|\\}
という区切り記号を使用します.ここではsを使用してみますが、使用しません.原因不明.\\d{1,}
で一致する( .matches( )
).総括コードは以下の通りである:/**
* Created by lixuefei on 9/5/18.
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
//arr = {1, 2 , 3},1979
public class test {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String[] str_arr = input.nextLine().split(",|=|\\{|\\}");
ArrayList coin = new ArrayList();
for(String i:str_arr){
if(i.trim().matches("\\d{1,}")){
coin.add(Integer.parseInt(i.trim()));
}
}
for(Integer test_i:coin){
System.out.println(test_i);
}
}
}
正規表現は本当に使いやすいです.しかし、問題はいつも間違っていることです.基本的な構文と基本的な文をここに記録します.
#* + ? 「ab*」:1つの文字列に1つのaの後に0つまたは複数のbが続くことを示す.「a」、「ab」、「abbb」、......「ab+」:1つの文字列に1つのaの後ろに少なくとも1つのb以上が付いていることを示す.「ab」、「abbb」......「ab?」:1つの文字列に1つのaの後ろに0つまたは1つのbがついていることを表す.“a”, "ab"
\s\S
s空白文字(スペース、リターン、タブ、改ページなど)
S空白以外の文字.それはs以外のすべてです
1数字:1*$
2 nビットの数字:^d{n}$
3少なくともnビットの数字:^d{n,}$
4 m-nビットの数字:^d{m,n}$
5ゼロとゼロ以外の先頭の数字:^(0|[1-9][0-9]*)$
0-9 ↩︎