Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中如何将名称文件拆分为计数序列?_Java_Split - Fatal编程技术网

在java中如何将名称文件拆分为计数序列?

在java中如何将名称文件拆分为计数序列?,java,split,Java,Split,我有以下表格中的文件列表: name_of_file_001.csv name_of_file_002.csv name_of_file_123.csv or name_of_file.csv second_name_of_file.csv 我不知道文件是否有001。 如何在java中获取文件名(仅获取文件名?请尝试以下操作: int i=0; while(!fullName.charAt(i).equals('.')&&!fullName.charAt(i).equa

我有以下表格中的文件列表:

name_of_file_001.csv
name_of_file_002.csv    
name_of_file_123.csv
or
name_of_file.csv
second_name_of_file.csv
我不知道文件是否有001。
如何在java中获取文件名(仅获取文件名?

请尝试以下操作:

int i=0;
while(!fullName.charAt(i).equals('.')&&!fullName.charAt(i).equals('0')){
  i++;
}
String name=fullName.substring(0, i);
fullName
的开头到
0
的第一次出现,获取字符串

编辑:

参考注释和大于
1..
的高位数字的情况,并从中得到启发:

EDIT2:

如果没有扩展名且全名与正则表达式不匹配(没有数字):


或者简单地说,我们将采用所有名称。

这个小类解决了main中显示的所有示例的问题:

public class Example {

   private static boolean isNaturalNumber(String str)
   {
     return str.matches("\\d+(\\.\\d+)?");
   }

   public static String getFileName(String s) {
        String fn = s.split("\\.")[0];
        int idx = fn.lastIndexOf('_');
        if (idx < 0) {
            return fn;
        }
        String lastPart = fn.substring(idx+1);
        System.out.println("last part = " + lastPart);
        if (isNaturalNumber(lastPart)) {
            return fn.substring(0,idx);
        } else {
            return fn;
        }
    }

    public static void main(String []args){
        System.out.println(getFileName("file_name_001.csv"));
        System.out.println(getFileName("file_name_1234.csv"));
        System.out.println(getFileName("file_name.csv"));
        System.out.println(getFileName("file_name"));
        System.out.println(getFileName("file"));
    }
}
公共类示例{
私有静态布尔值isNaturalNumber(字符串str)
{
返回str.matches(\\d+(\\.\\d+);
}
公共静态字符串getFileName(字符串s){
字符串fn=s.split(“\\”)[0];
int idx=fn.lastIndexOf(“”“);
if(idx<0){
返回fn;
}
字符串lastPart=fn.子字符串(idx+1);
System.out.println(“last part=“+lastPart”);
if(isNaturalNumber(最后一部分)){
返回fn.子串(0,idx);
}否则{
返回fn;
}
}
公共静态void main(字符串[]args){
System.out.println(getFileName(“file_name_001.csv”);
System.out.println(getFileName(“file_name_1234.csv”);
System.out.println(getFileName(“file_name.csv”);
System.out.println(getFileName(“文件名”);
System.out.println(getFileName(“文件”);
}
}
编辑1:将基于异常的检查替换为正则表达式检查


编辑2:处理不带下划线的文件名。

我修改了chsdk关于mmxx注释的解决方案:

int i=0;
while(i < fullName.length() && ".0123456789".indexOf(fullName.charAt(i)) == -1) {
  i++;
}
String name=fullName.substring(0, i);
inti=0;
而(i
编辑: 增加

i
我在此模式下解决了问题:

nameOfFile.split("\\.")[0].replaceall("_[0-9]*","");
拆分(“\”[0]删除“.csv”
文件名\u 001.csv=>文件名\u 001


.replaceall(“\u[0-9]*”,“)”删除,如果存在,“\u 001”
name\u的\u文件\u 001=>name\u的\u文件



结果是仅文件名

可能编号较高(例如文件名_142.csv)@mmxx是的,很好,在这种情况下,我们只需添加此测试
!fullName.charAt(i).equals('1'))
。以2、3、4、5、6、7、8、9开头的数字如何?没有扩展名的文件名如何?@EldadMor如何?名称将被采用,它是否有扩展名。我现在没有时间写一个有效的答案,但您考虑过使用正则表达式进行检查吗?例如smth like
[a-z]*(?=[0-9]{3})
依赖常规执行流中的异常不是好的编程实践。这取决于您需要调用此函数的时间。有关替代方法,请参阅此处:
int i=0;
while(i < fullName.length() && ".0123456789".indexOf(fullName.charAt(i)) == -1) {
  i++;
}
String name=fullName.substring(0, i);
i < fullName.length()
nameOfFile.split("\\.")[0].replaceall("_[0-9]*","");