Java编程,求字符串的长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java编程,求字符串的长度相关的知识,希望对你有一定的参考价值。

  
    首先打开my eclipse

    新建一个java项目,名字随意起

    名字起好后,点击完成

    右键点击项目名称,新建,类

    类的名字叫TextLength

    包的名字叫 com.zf.s2,点击完成判断是否是汉字
  public static int getChineseCount(String s) throws Exception//获得汉字的长度  char c;
      

      int chineseCount=0;

      if(!"".equals(""))//判断是否为空

      s=new String(s.getBytes(),"GBK");   //进行统一编码

      

      for(int i=0;i<s.length();i++)//for循环

      c=s.charAt(i);              //获得字符串中的每个字符

      if(isChineseChar(c))//调用方法进行判断是否是汉字

      chineseCount++;                 //等同于chineseCount=chineseCount+1

      

      

      return chineseCount;                   //返回汉字个数

      


      

      获得字母、数字、空格的个数

      public static String getStringInfo(String s)

      char ch;

      int character=0,blank=0,number=0;

      for(int i=0;i <s.length();i++)    //for循环

      

      ch=s.charAt(i);

      if((ch>=\'a\'&&ch <=\'z\')||(ch>=\'A\'&&ch <=\'Z\'))//统计字母

      character++; //等同于character=character+1

      else if(ch==\' \')                         //统计空格

      blank++; //等同于blank=blank+1

      else if(ch>=\'0\'&& ch <=\'9\')                //统计数字

      number++; //等同于number=number+1;

      


    完整代码

      

      package com.zf.s2;//创建一个包


      public class TextLength //描述字符串长度的类

      public static boolean isChineseChar(char c) throws Exception//判断是否是一个汉字

      return String.valueOf(c).getBytes("GBK").length>1;//汉字的字节数大于1

      

      public static int getChineseCount(String s) throws Exception//获得汉字的长度

      char c;

      int chineseCount=0;

      if(!"".equals(""))//判断是否为空

      s=new String(s.getBytes(),"GBK");   //进行统一编码

      

      for(int i=0;i<s.length();i++)//for循环

      c=s.charAt(i);              //获得字符串中的每个字符

      if(isChineseChar(c))//调用方法进行判断是否是汉字

      chineseCount++;                 //等同于chineseCount=chineseCount+1

      

      

      return chineseCount;                   //返回汉字个数

      

      public static String getStringInfo(String s)//获得字母、数字、空格的个数

      char ch;

      int character=0,blank=0,number=0;

      for(int i=0;i <s.length();i++)    //for循环

      

      ch=s.charAt(i);

      if((ch>=\'a\'&&ch <=\'z\')||(ch>=\'A\'&&ch <=\'Z\'))//统计字母

      character++; //等同于character=character+1

      else if(ch==\' \')                         //统计空格

      blank++; //等同于blank=blank+1

      else if(ch>=\'0\'&& ch <=\'9\')                //统计数字

      number++; //等同于number=number+1;

      


      return "字符串中共有"+character+"个字母,"+blank+"个空格,"+number+"个数字";

      

      public static void main(String []args) throws Exception //java程序的主入口方法

      String s="hello world 世界你好!!123*";

      System.out.println("字符串的总长度:"+s.length());//显示字符串长度

      System.out.println("字符串中汉字长度:"+getChineseCount(s)); //调用方法显示汉字长度

      System.out.println(getStringInfo(s));                       //调用方法显示其它字母类型的长度

      

      


参考技术A String len = "mylen";
len.length();//返回值为int类型,查一下API就好了。
参考技术B public int getWordCount(String s)

int length = 0;
for(int i = 0; i < s.length(); i++)

int ascii = Character.codePointAt(s, i);
if(ascii >= 0 && ascii <=255)
length++;
else
length += 2;


return length;

参考技术C String str="hi";
int t=str.length();
system.out.println(t);
参考技术D length()方法
String str = "hello";
system.out.println(str.length());

求两个大整数相乘的积,数字长度在127个字符之内。

    计算两个大整数相乘的结果,数字不是double类型能表示的,数字长度没有限制(最大127位)。

方法一:使用java中的大整数处理库函数,java.math.BigInteger,java.math.BigDecimal;

方法二:不利用库函数,自己实现其功能,可以练习自己对待复杂问题的处理能力,提高编程水平。

此代码中利于两者的结合,利于库函数可以看自己编写的代码的正确性。

1、主函数

import java.math.BigDecimal;
import java.util.Scanner;
public class Big_multip {
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	  int i=10;
	  while(i>1){
	  System.out.print("输入第一个数:");
	  String s1=sc.next();
	  System.out.print("输入第二个数:");
	  String s2=sc.next();
	  String s4=send(s1,s2);
	  System.out.println("计算结果是:"+s4);
	  System.out.println("正确结果:   "+ku_big(s1,s2));
	  --i;
	  }
	  sc.close();
};

2、对输入数据的第一步处理,分发处理代码 

public static String send(String s1,String s2){
    if(!(check(s1)&&check(s2)))
     return "输入有非法字符";    
    s1=take_head_zero(s1);
    s2=take_head_zero(s2);
    String str=multiply_first(s1,s2);
    str=take_head_zero(str);
    return str;
};

 

3、处理相乘的第一步

public static String multiply_first(String s1,String s2){
    int len2=s2.length(),a=0;
    String str="0";
    for(int i=0;i<len2;++i)
    {
        a=s2.charAt(len2-1-i)-‘0‘;
        String sa=null;
        if(a!=0)
        {
          sa=multiply_one(s1,a);
         for(int j=0;j<i;++j)
            sa=sa+"0";
         str=integer_add(sa,str);
        }
    }
    return str;
};

4、计算纯数字字符串乘以每个数字(个位数字)的结果

public static String multiply_one(String s,int a){
    int len=s.length(),k=0,before=0,kk=0;
    String str="";
    for(int i=1;i<=len;++i) /*从最低位(即下标最大)处开始算*/
    {
        k=(s.charAt(len-i)-‘0‘)*a+before; 
        before=k/10;
        k=k%10;
        str=k+str;
        kk=1;
    }
    if(kk==0)
        str="0";
    else
     if(before>0)
        str=before+str;
    return str;
};

5、两个纯数字相加代码

public static String integer_add(String s1,String s2){ 
    /*传递的时候已经确定第一个参数s1为最长字符串,s2为短字符串。*/
    if(s1.length()<s2.length())
    {
        String temp=s1;
        s1=s2;
        s2=temp;
    }
    int len1=s1.length(),len2=s2.length();
    int a,temp=0;
    String str="";
    for(int i=1;i<=len1;++i) 
    /*注意开始i=1,结束时i==len1,因为前面i是从1开始,后面结束要多算一位*/
    {
        if(i<=len2)
           a=temp+(s1.charAt(len1-i)-‘0‘)+(s2.charAt(len2-i)-‘0‘);
        else
            a=temp+(s1.charAt(len1-i)-‘0‘);
        temp=a/10;
        a=a%10;
        str=a+str;
    }
    if(temp!=0)
        str=temp+str;
    /*消除最前面的数字0*/
    str=take_head_zero(str);
    return str;
};

6、对于纯数字,剔除前面多余的零

/*剔除前面多余的数字0.*/
public static String take_head_zero(String s){
    int len=s.length(),i=0;
    while(i<len)
    {
        if(s.charAt(i)==‘0‘)
            ++i;
        else
            break;
    }
    if(i<len)
     s=s.substring(i);
    else
        s="0";
    return s;
};

7、检查输入的字符串是否有非法的字符

public static boolean check(String s){
    int k=0;
    for(int i=0;i<s.length();++i)
    {
        if(s.charAt(i)<=‘9‘&&s.charAt(i)>=‘0‘)
        {
            if(s.charAt(i)==‘.‘)
            {    ++k;
              if(k>=2)
                return false;
            }
        }
        else
            return false;
    }
    return true;
};

8、调用库函数就两个长纯数字的积,为了验证自己编写的代码计算结果是否正确。

public static String ku_big(String s1,String s2){
    BigDecimal b1;
    BigDecimal b2;
    BigDecimal b=new BigDecimal("0");
   try{
    b1=new BigDecimal(s1);  
    b2=new BigDecimal(s2);
    b=b1.multiply(b2);
    
    }catch(NumberFormatException e){
        //System.out.println(e);
        return "输入有非法字符";
    }
    return b.toString();
};

999、下面是整个程序的完整代码(此代码仅仅参考,若有bug希望共勉。)

/*两个长数字相乘*/
import java.math.BigDecimal;
import java.util.Scanner;
public class Big_multip {
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
      int i=10;
      while(i>1){
      System.out.print("输入第一个数:");
      String s1=sc.next();
      System.out.print("输入第二个数:");
      String s2=sc.next();
      String s4=send(s1,s2);
      System.out.println("计算结果是:"+s4);
      System.out.println("正确结果:   "+ku_big(s1,s2));
      --i;
      }
      sc.close();
};
public static String send(String s1,String s2){
    if(!(check(s1)&&check(s2)))
     return "输入有非法字符";    
    s1=take_head_zero(s1);
    s2=take_head_zero(s2);
    String str=multiply_first(s1,s2);
    str=take_head_zero(str);
    return str;
};
public static String multiply_first(String s1,String s2){
    int len2=s2.length(),a=0;
    String str="0";
    for(int i=0;i<len2;++i)
    {
        a=s2.charAt(len2-1-i)-‘0‘;
        String sa=null;
        if(a!=0)
        {
          sa=multiply_one(s1,a);
         for(int j=0;j<i;++j)
            sa=sa+"0";
         str=integer_add(sa,str);
        }
    }
    return str;
};
public static String multiply_one(String s,int a){
    int len=s.length(),k=0,before=0,kk=0;
    String str="";
    for(int i=1;i<=len;++i) /*从最低位(即下标最大)处开始算*/
    {
        k=(s.charAt(len-i)-‘0‘)*a+before; 
        before=k/10;
        k=k%10;
        str=k+str;
        kk=1;
    }
    if(kk==0)
        str="0";
    else
     if(before>0)
        str=before+str;
    return str;
};
public static String integer_add(String s1,String s2){ 
    /*传递的时候已经确定第一个参数s1为最长字符串,s2为短字符串。*/
    if(s1.length()<s2.length())
    {
        String temp=s1;
        s1=s2;
        s2=temp;
    }
    int len1=s1.length(),len2=s2.length();
    int a,temp=0;
    String str="";
    for(int i=1;i<=len1;++i) 
    /*注意开始i=1,结束时i==len1,因为前面i是从1开始,后面结束要多算一位*/
    {
        if(i<=len2)
           a=temp+(s1.charAt(len1-i)-‘0‘)+(s2.charAt(len2-i)-‘0‘);
        else
            a=temp+(s1.charAt(len1-i)-‘0‘);
        temp=a/10;
        a=a%10;
        str=a+str;
    }
    if(temp!=0)
        str=temp+str;
    /*消除最前面的数字0*/
    str=take_head_zero(str);
    return str;
};
/*剔除前面多余的数字0.*/
public static String take_head_zero(String s){
    int len=s.length(),i=0;
    while(i<len)
    {
        if(s.charAt(i)==‘0‘)
            ++i;
        else
            break;
    }
    if(i<len)
     s=s.substring(i);
    else
        s="0";
    return s;
};
public static boolean check(String s){
    int k=0;
    for(int i=0;i<s.length();++i)
    {
        if(s.charAt(i)<=‘9‘&&s.charAt(i)>=‘0‘)
        {
            if(s.charAt(i)==‘.‘)
            {    ++k;
              if(k>=2)
                return false;
            }
        }
        else
            return false;
    }
    return true;
};
public static String ku_big(String s1,String s2){
    BigDecimal b1;
    BigDecimal b2;
    BigDecimal b=new BigDecimal("0");
   try{
    b1=new BigDecimal(s1);  
    b2=new BigDecimal(s2);
    b=b1.multiply(b2);
    
    }catch(NumberFormatException e){
        //System.out.println(e);
        return "输入有非法字符";
    }
    return b.toString();
};

}

 

以上是关于Java编程,求字符串的长度的主要内容,如果未能解决你的问题,请参考以下文章

Java经典编程题50道之三十九

求两个大整数相乘的积,数字长度在127个字符之内。

用JAVA编程使用一位数组求学生的平均成绩

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

Java编程基础-字符串

C++编程,从键盘输入两个数组,求两个数组的交集并输出。