跪求:Java怎样判断字符串中最后一个英文单词的位置英文的索引位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跪求:Java怎样判断字符串中最后一个英文单词的位置英文的索引位置相关的知识,希望对你有一定的参考价值。

错了 错了 应该是判断这个字符串 String s = "send an e-mail 发送电子邮件";找到第一个中文的索引位置

这个可以解决你的问题,你可以运行试试。我自己写的,之前真没想过找汉字索引问题,我试过可以,不明白的可以给我回复。搞清这个问题我花了接近一个小时呵呵。不过搞懂了以后就有经验了。
public class SerchingJava
public static void main (String[] args)

String s="send an e-mail 发送电子邮件";
// System.out.print('\u4e00');
// System.out.print('\u9fa5');
// 把 这unicode编码 两个边界汉字(最大和最小)转换成 十进制
// int i= Integer.parseInt("4e00",16);
// int j= Integer.parseInt("9fa5",16);
// 获取它们之间的差值
// System.out.println(i-j);
//
//试验字符串的 compereTo方法 比较 这两个汉字
// System.out.println("一".compareTo("\u9fa5"));
/* 通过上面注释部分可知
* 字符串的 compereTo方法返回的结果和i-j结果相等 所以可以用这个原理
* 来获取第一个中文的索引位置
* */
for (int index = 0;index<s.length()-1;index++)

//将每一个角标的字符(字母 汉字 空格等)一次转换成字符串
String w=s.substring(index, index+1);
//
//System.out.println(w.compareTo("\u4e00"));
//System.out.println(w.compareTo("\u9fa5"));
// 而java采用unicode编码,汉字的范围是 "\u4e00"(一)到"\u9fa5"(龥)
if(w.compareTo("\u4e00")>0&&w.compareTo("\u9fa5")<0)

System.out.println("第一个中文的索引位置"+index);
//获取第一个汉字索引位置 跳出循环
break;



参考技术A Unicode汉字和英文编码范围 :http://wenku.baidu.com/view/f22eb66b25c52cc58bd6be50.html
如果只有英文(包括字母和标点)和中文的话,下面的代码你就够用了,如果还有其他的文字,那么你就要参考上面的编码范围了,希望对你有所帮助。
【代码】:
public class Test1
public int getValue(String str)
int result = -1;
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++)
if((int)ch[i] > 127)//0-127是asci码范围即英文
return i;


return result;

public static void main(String[] args)
Test1 t = new Test1();
String str = "send an e-mail 发送电子邮件";
int num = t.getValue(str);
if(num == -1)
System.out.println("没有中文!");
else
System.out.println("第一个中文的下标是" + num);




【结果】:第一个中文的下标是15本回答被提问者和网友采纳
参考技术B String msg = "afdfsfsfsdfsdfsdfdsfsdfsdfds";
String temp = msg.substring(temp.length-1);//截取最后一个字符
int index = msg.lastIndexof(temp);//这个就是那个字符的索引
参考技术C public static void main(String[] args) throws Exception
String s = "send an e-mail 发送电子邮件";
int index = 0;
byte[] b = s.getBytes();
for(int i = 0;i < b.length; i++ )
if(b[i]<0)
index = i;
break;


System.out.println(index);
参考技术D String abc="send an e-mail 发送电子邮件";
for(int i=0;i<abc.length();i++)
if(abc.charAt(i)>='\u4e00'&&abc.charAt(i)<='\u9fa5')
System.out.println(abc.charAt(i)+"->"+i);
break;



结果:发->16

JAVA实验--统计文章中单词的个数并排序

分析:

1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词

2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到map比较合适吧,因为map中有 键-值 的关系,可以把字符串设置为键,把出现的个数设置为整型,这样就能够建立起一一对应的关系,不用再判断所在的位置

 

根据上面自己的理解,今天我写了以下的一部分代码,对哈利波特第一集的这部分文章进行了单词的统计的测试,测试的结果相对良好,没有问题。

package pipei;
//洪鼎淇 20173627 信1705-3
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
//哈利波特单词统计



public class Pipei {
    public Map<String,Integer> map1=new HashMap<String,Integer>();
    public static void main(String arg[]) {
        String sz[];
        Integer num[];
        final int MAXNUM=10; //统计的单词出现最多的前n个的个数
        
        
        sz=new String[MAXNUM+1];
        num=new Integer[MAXNUM+1];
        Pipei pipei=new Pipei();
        int account =1;
        //Vector<String> ve1=new Vector<String>();
        try {
            pipei.daoru();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        System.out.println("英文单词的出现情况如下:");
        int g_run=0;

        for(g_run=0;g_run<MAXNUM+1;g_run++)
        {
            account=1;
            for(Map.Entry<String,Integer> it : pipei.map1.entrySet())
            {
                if(account==1)
                {
                    sz[g_run]=it.getKey();
                    num[g_run]=it.getValue();
                    account=2;
                }
                if(account==0)
                {
                    account=1;
                    continue;
                }
                if(num[g_run]<it.getValue())
                {
                    sz[g_run]=it.getKey();
                    num[g_run]=it.getValue();
                }
                //System.out.println("英文单词: "+it.getKey()+" 该英文单词出现次数: "+it.getValue());
            }
            pipei.map1.remove(sz[g_run]);
        }
        int g_count=1;
        String tx1=new String();
        for(int i=0;i<g_run;i++)
        {
            if(sz[i]==null)
                continue;
            if(sz[i].equals(""))
                continue;
            tx1+="出现次数第"+(g_count)+"多的单词为:"+sz[i]+"\\t\\t\\t出现次数: "+num[i]+"\\r\\n";
            System.out.println("出现次数第"+(g_count)+"多的单词为:"+sz[i]+"\\t\\t\\t出现次数: "+num[i]);
            g_count++;
        }
        try {
            pipei.daochu(tx1);
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        
        
    }
    public void daoru() throws IOException
    {
        
        File a=new File("1.Harry Potter and the Sorcerer\'s Stone.txt");
        FileInputStream b = new FileInputStream(a);
        InputStreamReader c=new InputStreamReader(b,"UTF-8");
        String string2=new String();
        while(c.ready())
        {
            char string1=(char) c.read();
            if(!isWord(string1))
            {
                if(map1.containsKey(string2))
                {
                    Integer num1=map1.get(string2)+1;
                    map1.put(string2,num1);
                }
                else
                {
                    Integer num1=1;
                    map1.put(string2,num1);
                }
                string2="";
            }
            else
            {
                string2+=string1;
            }
        }
        if(!string2.isEmpty())
        {
            if(map1.containsKey(string2))
            {
                Integer num1=map1.get(string2)+1;
                map1.put(string2,num1);
            }
            else
            {
                Integer num1=1;
                map1.put(string2,num1);
            }
            string2="";
        }
        c.close();
        b.close();
    }
    public void daochu(String txt) throws IOException
    {
        File fi=new File("tongji.txt");
        FileOutputStream fop=new FileOutputStream(fi);
        OutputStreamWriter ops=new OutputStreamWriter(fop,"UTF-8");
        ops.append(txt);
        ops.close();
        fop.close();
    }
    public boolean isWord(char a)
    {
        if(a<=\'z\'&&a>=\'a\'||a<=\'Z\'&&a>=\'A\')
            return true;
        return false;
    }
    
}

测试截图:

这是出现的单词的截图情况,对于其中出现s的情况的分析,s其实是单词里面的缩写,一般往往有It\'s 这种情况的出现,为了避免这种情况,我对文中的某一部分进行修改(修改部分如下图),将It\'s看成一部分

 

isWord函数判断是否为字母的这一部分将单引号也作为一个符号放进去

修改完之后的测试如下:

搞定!!

 

以上是关于跪求:Java怎样判断字符串中最后一个英文单词的位置英文的索引位置的主要内容,如果未能解决你的问题,请参考以下文章

JAVA实验--统计文章中单词的个数并排序

Java编程中遇到的一系列问题,跪求答案

java编程 字母数和单词数问题

跪求java代码读取txt文档中的数据 并判断正负 正数返回1 负数返回0 写入另一个txt文档中

我们怎样才能找回最后一个被删除的单词

跪求五个字母组成的英文单词少于100个别发了