ccf题目:字符串匹配

试题编号:

201409-3

试题名称:

字符串匹配

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述

  给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。

输入格式

  输入的第一行包含一个字符串S,由大小写英文字母组成。
  第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
  第三行包含一个整数n,表示给出的文字的行数。
  接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。

输出格式

  输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。

样例输入

Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello

样例输出

HelloWorld
HiHiHelloHiHi
HELLOisNOTHello

样例说明

  在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。

评测用例规模与约定

  1<=n<=100,每个字符串的长度不超过100。


==========================================================

解法:

package CSP3;

import java.util.Scanner;

public class Main3 {
	public static void main(String[] args) {
		new Main3().run();
	}
	public void run(){
		Scanner sc=new Scanner(System.in);
		String str=sc.next();
		int flag=sc.nextInt();
		int n=sc.nextInt();
		String[] s=new String[n];
		for(int i=0;i<n;i++){
			s[i]=sc.next();   //此处用nextline(),只能输入4行
		}
		if(flag==1){
			for(int i=0;i<n;i++){
				if(s[i].indexOf(str)>=0){  //indexof表示是否包含子字符串,包括返回值>=0
					System.out.println(s[i]);
				}
			}
		}
		else{
			for(int i=0;i<n;i++){
				if(s[i].toUpperCase().indexOf(str.toUpperCase())>=0)
					System.out.println(s[i]);
			}
		}
	}
}

==========================================================

知识补充:

Scanner中next()和nextLine()的区别

当使用nextLine()方法时会读取改行剩余的所有的内容,包括换行符,然后把焦点移动到下一行的开头。所以这样就无法接收到下一行输入的String类型的变量。

next()方法是以换行或者空格符为分界线接收下一个String类型变量。

两个例子(例子选自http://www.cnblogs.com/gold-worker/archive/2013/04/10/3013063.html)

例1:

package cn.dx;

import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {
        Scanner in =  new Scanner(System.in);
        System.out.println("请输入一个整数");
        while(in.hasNextInt()){
            int num = in.nextInt();
            System.out.println("请输入一个字符串");
            String str = in.nextLine();
            System.out.println("num="+num+",str="+str);
            System.out.println("请输入一个整数");
        }
    }
}

结果:

请输入一个整数
     1231
     请输入一个字符串
     num=1231,str=
     请输入一个整数

     第二个String类型的参数没有读取进来。

=================================

例2:

package cn.dx;

import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {
        Scanner in =  new Scanner(System.in);
        System.out.println("请输入一个整数");
        while(in.hasNextInt()){
            int num = in.nextInt();
            System.out.println("请输入一个字符串");
            String str = in.next();
            System.out.println("num="+num+",str="+str);
            System.out.println("请输入一个整数");
        }
    }
}

结果:

请输入一个整数
        123
        请输入一个字符串
        sdjakl
        num=123,str=sdjakl
        

        请输入一个整数
        213 jdskals
        请输入一个字符串
        num=213,str=jdskals
        请输入一个整数 



你可能感兴趣的:(字符串匹配,indexOf,next,CCF,nextLine)