【问题标题】:How to check if the string the user has entered contains a file extension如何检查用户输入的字符串是否包含文件扩展名
【发布时间】:2018-02-01 18:27:49
【问题描述】:

所以在这个程序中,用户可以创建/指定一个目录并创建一个文件,前提是该文件尚不存在。当用户输入文件名时,他们也需要输入文件扩展名。我遇到的问题是如何让代码在用户输入的字符串末尾查找文件扩展名。我什至检查了一个“。”但我被困在程序可以查看文件是否有 .json 或 .txt 或“。”之后的任何内容的方式上。

TL;DR 如何使代码检查用户输入的字符串末尾的文件扩展名(

请注意,下面的代码还没有完成,我卡住的条件里面有注释。

package filecreator.coolversion;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class FileCreatorCoolversion {

public static Scanner sc = new Scanner(System.in);
public static boolean success = false;
public static String filename;
public static String filedir;
public static File file;
public static File dir;

public static void main(String[] args) throws IOException {

    System.out.println("********************************");
    System.out.println("* Welcome to File Creator 2.0! *");
    System.out.println("********************************");
    System.out.println(" ");

    while(!success) {

        System.out.println("Would you like to create a file? Y/N?");
        String usrans = sc.nextLine();

        if(usrans.equalsIgnoreCase("y")) {

            System.out.println("Proceeding with file creation...");
            break;

        } else if(usrans.equalsIgnoreCase("n")) {

            System.out.println("Exiting Program...");
            System.exit(0);

        } else if(!usrans.equalsIgnoreCase("y") || !usrans.equalsIgnoreCase("n")) {

            System.out.println("That is not a valid answer! Please try again!");
            System.out.println(" ");
        }
    }

    while(!success) {

        System.out.println(" ");
        System.out.println("Please enter a valid filename:");
        filename = sc.nextLine();

        if(filename.isEmpty()) {

            System.out.println("Please enter a file name!");
            break;

        } else if(filename.contains("/") || filename.contains(":") || 
                  filename.contains("*") || filename.contains("?") ||
                  filename.contains("<") || filename.contains(">") ||
                  filename.contains("|") || filename.contains("\"") ||
                  filename.contains("\\")) {

            System.out.println("Please do not include / \\ : * ? \" < > |");

        } else if(!filename.contains(".")) {

            System.out.println("Please add a apropriate file extensions");

        } else if (filename.) {

            //HERE IS WHERE IM STUCK

        } else {

            System.out.println(" ");
            System.out.println("File name \"" + filename + "\" chosen");
            break;
        }
    }

        System.out.println(" ");
        System.out.println("Where would you like to have your file saved?");
        System.out.println("Please enter a valid directory");

    while(!success) {

        filedir = sc.nextLine();

        if(!filename.contains(":")) {

            System.out.println(" ");
            System.out.println("Please enter a valid directory!");

        } else if(!filename.contains("\\")) {

            System.out.println(" ");
            System.out.println("Please enter a valid directory!");

        } else {

            System.out.println("File directory \"" + filedir + "\" chosen");
            break;
        }
    }

    System.out.println(" ");
    System.out.println("Creating file...");


}

}

【问题讨论】:

  • 你输入的文件名可以像file.name.ext吗?
  • 据我了解,您想检查用户输入的任何扩展名吗?
  • filename.endsWith(".json") ?还是一组特定的扩展之一?或者任何非空扩展?
  • @Gusti Arya 是的
  • @AJNeufeld 任何非空扩展

标签: java string file


【解决方案1】:

如果您想在. 之后获得任何扩展名,您可以在此处使用字符串拆分的一些示例

String exts[] = filename.split("\\.");
int extIndex = exts.length;\\find array length incase user inputed more than one dot

System.out.println(exts[extIndex - 1]); \\ here you get the extension

【讨论】:

  • 或者你在文件名的中间得到了一些东西。 "my.file.name.txt" 会给你"file"
  • @AJNeufeld 谢谢提醒,我更新了答案
【解决方案2】:

找到文件扩展名(如果有):

static String getExtension(String str){
    int begin = str.lastIndexOf(".");
    if(begin == -1)
        return null;
    String extension = str.substring(begin + 1);
    return extension;
}   

检查扩展是否有效:

static boolean isExtensionValid(String extension){
    String validExtensions [] = new String[]{
        "json", "txt"
    };
    for(String str : validExtensions )
        if(str.equals(extension))
            return true;

    return false;
}

测试整个事情:

public static void main (String[] args){
    String val = "Kappa.txt";
    String extension = getExtension(val);

    if(extension != null){
        System.out.println(extension);
        System.out.println(isExtensionValid(extension));
    } else {
    //Handle no extension found here
    }
}

【讨论】:

    【解决方案3】:

    您可能想要做的就是检查您在前一个条件中检查的. 的lastIndex,然后查看其后是否有任何字符串:

    String extension = filename.substring(filename.lastIndexOf(".") + 1);
    //Checks if there is any extension after the last . in your input
    if (!extension.isEmpty()) {
        System.out.print("This is the extension - " + extension);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2014-12-23
      相关资源
      最近更新 更多