C#编程实践:拆解输入的文件路径(学习笔记)

题目要求

输入的字符串必须包含文件路径、文件名和文件扩展名,将这三类分别拆解输出。

输入格式

D:\CSDN.NET\C#编程实践\拆解输入的文件路径(学习笔记).docx

输出格式

文件路径:D:\CSDN.NET\C#编程实践
文件名:拆解输入的文件路径(学习笔记)
扩展名:docx

编程平台

Visual Studio 2017 控制台

代码实现

初始版代码

/* 思路:倒序检查输入的字符串。 */
string input = Console.ReadLine(); // 获取用户输入
int i = 0;
for (i = input.Length - 1; i >= 0; --i) // 寻找'.'
{
    if (input[i] == '.')
    {
        break;
    }
}
if (i != -1 && i != input.Length - 1) // 存在'.'且'.'不是位于最后一个字符
{
    int j = 0;
    for (j = i - 1; j >= 0; --j) // 寻找'.'前面有没有的'\'
    {
        if (input[j] == '\\') 
        {
            break;
        }
    }
    if (j != -1) // 说明有'\'
    {
        if (i - 1 - j != 0) // 说明字符串最后一个'\'和'.'中间有内容
        {
            string extensionName = input.Substring(i + 1, input.Length - 1 - i);
            string fileName = input.Substring(j + 1, i - 1 - j);
            string filePath = input.Substring(0, j + 1);
            Console.WriteLine("文件路径:{0}", filePath);
            Console.WriteLine("文件名:{0}", fileName);
            Console.WriteLine("扩展名:{0}", extensionName);
        }
        else
        {
            Console.WriteLine("您输入的字符串没有文件名!");
        }
    }
    else
    {
        Console.WriteLine("您输入的字符串没有文件路径!");
    }

}
else
{
    Console.WriteLine("您输入的字符串没有扩展名!");
}
// 不足:判断分支过多,不易理解。

改进版代码

/* 思路:先假设输入的字符串符合题意,直接拆解字符串,拆解过程失败或拆解结果为空则报错。 */
try
{
    string input = Console.ReadLine(); // 获取用户输入
    string filePath = input.Substring(0, input.LastIndexOf('\\') + 1);
    string fileName = input.Substring(input.LastIndexOf('\\') + 1,
        input.LastIndexOf('.') - input.LastIndexOf('\\') - 1);
    string extensionName = input.Substring(input.LastIndexOf('.') + 1,
        input.Length - input.LastIndexOf('.') - 1);
    if (filePath == "" || fileName == "" || extensionName == "")
    {
        Console.WriteLine("您输入的字符串不是一个合法的地址!");
    }
    else // 拆解成功,说明是合法地址
    {
        Console.WriteLine("文件路径:{0}", filePath);
        Console.WriteLine("文件名:{0}", fileName);
        Console.WriteLine("扩展名:{0}", extensionName);
    }
}
catch (Exception e)
{
    Console.WriteLine("您输入的字符串不是一个合法的地址!");
}
// 不足:报错提示笼统,无法指明直接错误。

优化版代码

/* 思路:逐步检查字符串是否符合要求,并用临时变量记录是否有错误。 */
string input = Console.ReadLine(); // 获取用户输入
bool hasError = false;
if (!input.Contains("\\")) // 文件路径中一定有‘\’
{
    Console.WriteLine("您输入的地址没有文件路径!");
    hasError = true;
}
if (!Regex.IsMatch(input.Substring(input.LastIndexOf(".") + 1), "^[a-zA-Z0-9]+$"))
	// 扩展名一定由一个或多个数字或字母组成
{
    Console.WriteLine("您输入的地址没有扩展名!");
    hasError = true;
}
if (input.LastIndexOf('.') - input.LastIndexOf('\\') - 1 == 0)
	// 检查最后一个‘\’和‘.’之间一定有字符
{
    Console.WriteLine("您输入的地址没有文件名!");
    hasError = true;
}
if (hasError == false) // 说明是一个合法的地址,可以进行拆解
{
    string filePath = input.Substring(0, input.LastIndexOf('\\') + 1);
    string fileName = input.Substring(input.LastIndexOf('\\') + 1,
        input.LastIndexOf('.') - input.LastIndexOf('\\') - 1);
    string extensionName = input.Substring(input.LastIndexOf('.') + 1,
        input.Length - input.LastIndexOf('.') - 1);
    Console.WriteLine("文件路径:{0}", filePath);
    Console.WriteLine("文件名:{0}", fileName);
    Console.WriteLine("扩展名:{0}", extensionName);
}

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值