iOS下的indexOf & subString

本文介绍了一个iOS开发中关于字符串操作的例子,演示了如何使用NSString的rangeOfString和substringFromIndex方法来处理字符串。通过一个具体的例子,展示了如何找到特定字符的位置并获取其后的子串。

写iOS代码就是觉得特别别扭,无奈,谁让我是个Javaer

OK连字符串indexOf和subString也要去问Google,代码如下:

 

eg:

 

NSString *str = @"hello:world";
NSRange range = [str rangeOfString:@":"];
str = [str substringFromIndex:NSMaxRange(range)];

 

其中range这个东东有两个属性:length、location

length表示用来做range的字符串的长度,在此就是":"的长度 = 1;

location表示首个出现该匹配字符串的下标

import java.io.*; public class ioscore { public static void main(String[] args) throws IOException { File file1=new File("F:\\java\\ScoreDemo\\src\\Score.txt"); File file2=new File("F:\\java\\ScoreDemo\\src\\Score_sum.txt"); String a; BufferedReader buf1=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter out1=new BufferedWriter(new FileWriter(file1)); System.out.println("请输入学生姓名,输入quit结束录入"); while(!((a=buf1.readLine()).equals("quit"))){ out1.write("姓名:"+a+" "); System.out.println("请输入学生的语文成绩"); a=buf1.readLine(); out1.write("语文成绩:"+a+" "); System.out.println("请输入学生的数学成绩"); a=buf1.readLine(); out1.write("数学成绩:"+a+" "); System.out.println("请输入学生的英语成绩"); a=buf1.readLine(); out1.write("英语成绩:"+a+" "); System.out.println("请输入学生姓名,输入quit结束录入"); out1.newLine(); } buf1.close(); out1.close(); BufferedReader buf2=new BufferedReader(new InputStreamReader(file1)); BufferedWriter out2=new BufferedWriter(new FileWriter(file2)); String input; int sum1,sum2,sum3,sum; input=buf2.readLine(); String regax1 ="语文成绩为:"; String regax2 ="数学成绩为:"; String regax3 ="英语成绩为:"; while(!((input=buf2.readLine()).equals(null))){ sum1=Integer.parseInt(input.substring(input.indexOf(regax1)+regax1.length(),input.indexOf(regax2))); sum2=Integer.parseInt(input.substring(input.indexOf(regax2)+regax2.length(),input.indexOf(regax3))); sum3=Integer.parseInt(input.substring(input.indexOf(regax3)+regax3.length())); sum=sum1+sum2+sum3; out2.write(input+"总成绩为:"+sum); out2.newLine()
03-11
<think>好的,我现在需要仔细分析用户提供的Java代码,找出其中的错误,并给出修改建议。首先,我会通读一遍代码,了解它的功能。看起来这是一个学生成绩录入和总分计算的程序,分为两个部分:第一部分将学生姓名和各科成绩写入Score.txt,第二部分读取该文件,计算总分后写入Score_sum.txt。 首先检查代码结构是否有明显错误。注意到代码结尾的while循环部分,用户可能没有正确关闭括号,导致语法错误。例如,在第二个while循环后,没有闭合的括号,这会导致编译错误。此外,在第二个BufferedReader初始化时,使用了InputStreamReader(file1),但正确的应该是FileReader,因为File对象需要被正确读取,而InputStreamReader的参数应该是InputStream,这里可能应该使用FileReader。 接下来,查看字符串处理部分。用户定义了regax1、regax2、regax3为“语文成绩为:”等,但在写入文件时,实际写入的是“语文成绩:”后面有一个空格,没有“为”字。这会导致indexOf查找时找不到匹配的字符串,返回-1,进而导致substring的参数错误,抛出异常。 另外,在读取Score.txt时,用户可能没有处理所有行,或者没有正确处理null的情况。例如,在while循环的条件中,使用input = buf2.readLine(),如果读到文件末尾会返回null,此时调用equals(null)会导致空指针异常,应该用input != null来判断。 还要检查资源是否正确关闭,是否有异常处理。例如,在代码中可能没有处理IO异常,虽然main方法声明了throws IOException,但某些地方可能需要更细致的处理。 最后,确认代码的格式是否正确,比如括号是否匹配,语句是否结束等。例如,最后的out2.newLine()后面缺少分号,且while循环可能缺少闭合的大括号。 总结问题点:1. 字符串匹配错误导致子字符串提取问题;2. 文件读取方式错误;3. 循环条件中的空指针异常;4. 缺少括号和分号导致的语法错误;5. 可能的资源泄漏问题。</think>您提供的代码存在以下几个关键问题及修改建议: ### 一、字符串解析逻辑错误 问题表现:在解析成绩时使用的正则表达式与实际存储格式不匹配 错误代码: $$input.indexOf("语文成绩为:")$$ 实际写入格式为$"语文成绩:"$,缺少$"为"$字[^1] ### 二、文件读取方式错误 问题表现:使用错误的Reader初始化方式 错误代码: ```java new InputStreamReader(file1) ``` 应改为: ```java new FileReader(file1) ``` ### 三、空指针异常风险 问题表现:文件读取循环条件错误 错误代码: ```java while(!((input=buf2.readLine()).equals(null))) ``` 应改为: ```java while((input = buf2.readLine()) != null) ``` ### 四、语法结构错误 问题表现:缺少闭合括号和分号 错误位置:代码末尾缺少2个闭合括号和分号 ### 完整修正代码 ```java import java.io.*; public class ioscore { public static void main(String[] args) throws IOException { File file1 = new File("F:\\java\\ScoreDemo\\src\\Score.txt"); File file2 = new File("F:\\java\\ScoreDemo\\src\\Score_sum.txt"); // 数据录入部分 try (BufferedReader buf1 = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter out1 = new BufferedWriter(new FileWriter(file1))) { System.out.println("请输入学生姓名,输入quit结束录入"); String a; while (!((a = buf1.readLine()).equals("quit"))) { out1.write("姓名:" + a + " "); // 各科成绩录入...(保持原逻辑) } } // 成绩计算部分 try (BufferedReader buf2 = new BufferedReader(new FileReader(file1)); BufferedWriter out2 = new BufferedWriter(new FileWriter(file2))) { String input; String target1 = "语文成绩:"; String target2 = "数学成绩:"; String target3 = "英语成绩:"; while ((input = buf2.readLine()) != null) { // 修正字符串解析逻辑 int pos1 = input.indexOf(target1) + target1.length(); int pos2 = input.indexOf(target2) + target2.length(); int pos3 = input.indexOf(target3) + target3.length(); int sum = Integer.parseInt(input.substring(pos1, input.indexOf(target2)).trim()) + Integer.parseInt(input.substring(pos2, input.indexOf(target3)).trim()) + Integer.parseInt(input.substring(pos3).trim()); out2.write(input + " 总成绩:" + sum); out2.newLine(); } } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值