How do I use a dot as a delimiter?

2020-02-07 04:37发布

问题:

import java.util.Scanner;
public class Test{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        input.useDelimiter(".");
        String given = input.next();
        System.out.println(given);
    }
}

When I run the above code and type in asdf. then enter, I get nothing.

It works fine with "," ";" "\"" "\\\\" or whatever, but just not with "."... So is there something about a dot or is it just a problem with Eclipse IDE or whatever?

回答1:

Scanner is using regular expression (regex) as delimiter and dot . in regex is special character which represents any character except line separators. So if delimiter is any character when you write asdf. each of its character will be treated as delimiter, not only dot. So each time you will use next() result will be empty string which exists in places I marked with |

a|s|d|f|.

To create dot literal you need to escape it. You can use \. for that. There are also other ways, like using character class [.].

So try with

input.useDelimiter("\\.");


回答2:

/This could be another helpful example, that how the use of Delimeter? The scanner detects DOTs in any string then it will simply separate and store the string data in ArrayList by the help of any LOOP./

/If it is helped Hit the UP button./

public class MainActivity extends AppCompatActivity {

EditText et_ip_address;
TextView txt_1st;
TextView txt_2nd;
TextView txt_3rd;
TextView txt_4th;
Button btn_getResult;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn_getResult = findViewById(R.id.button);
    et_ip_address = findViewById(R.id.et_ip_address);
    txt_1st = findViewById(R.id.txt_1st);
    txt_2nd = findViewById(R.id.txt_2nd);
    txt_3rd = findViewById(R.id.txt_3rd);
    txt_4th = findViewById(R.id.txt_4th);
    final ArrayList data = new ArrayList();

    //Click on this button execute the code to separate Strings
    btn_getResult.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            data.clear();
            Scanner fromString = new Scanner(et_ip_address.getText().toString());
            fromString.useDelimiter("\\.");   //this is how we should use to detects DOT
            while(fromString.hasNext()){
                String temp = fromString.next();
                data.add(temp);
            }
            txt_1st.setText(data.get(0).toString());
            txt_2nd.setText(data.get(1).toString());
            txt_3rd.setText(data.get(2).toString());
            txt_4th.setText(data.get(3).toString());
        }
    });
}

}