Java---练习(面试题) :字符串截取(1)
在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。
但对应的字节数不同,一个汉字占两个字节。
定义一个方法,按照指定的字节数来取子串。
如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃。如果取四个字节就是“ab你”,取五个字节还是“ab你”。
上面给出的是在gbk编码下的截取字符串。
下面我写了个代码,可以在utf-8和gbk编码下都能截取字符串。
注意:utf-8下的绝大多数汉字都是3个字节,所以,为了简化,全部当成了3个字节处理。
package io.string;
import java.io.IOException;
import java.util.Scanner;
public class StringCutOut {
static final String STR = "汗";
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
// 只考虑GBK和UTF-8
while (true) {
if (STR.getBytes().length % 2 == 0) {// GBK
System.out.println("请输入字符串:(输入'#'结束为结束程序)");
String str = sc.next();
if ("#".equals(str)) {
return;
}
System.out.println("请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):");
int n = sc.nextInt();
int len = 0;
int m = n;
while (len < str.length()) {
if (str.charAt(len) >= 0 && str.charAt(len) <= 128) {
n--;
System.out.print(str.charAt(len));
if (n <= 0) {
n = m;
System.out.println();
}
len++;
} else {
n -= 2;
System.out.print(str.charAt(len));
if (n <= 0) {
n = m;
System.out.println();
}
len++;
}
}
System.out.println();
} else if (STR.getBytes().length % 2 != 0) {// utf-8
System.out.println("请输入字符串:(输入'#'结束为结束程序)");
String str = sc.next();
if ("#".equals(str)) {
return;
}
str = new String(str.getBytes("gbk"), "UTF-8");
//因为我的终端输入默认是gbk的,改了系统的编码还是没用。所以就用这个转码了。。
//这里肯定是有bug的----留待下次编辑修复
// System.out.println(str);
// System.out.println(str.length());
System.out.println("请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):");
int n = sc.nextInt();
int len = 0;
int m = n;
while (len < str.length()) {
if (str.charAt(len) >= 0 && str.charAt(len) <= 128) {
n--;
System.out.print(str.charAt(len));
len++;
if (n <= 0) {
n = m;
System.out.println();
}
} else {
if(n-2<=0&&m>=3){
n=m;
System.out.println();
continue;
}
n -= 3;
System.out.print(str.charAt(len));
if(n<=0){
n=m;
System.out.println();
}
len++;
}
}
}
System.out.println();
}
}
}
GBK编码下的一个测试结果:
请输入字符串:(输入'#'结束为结束程序)
ab你好
请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):
4
ab你
好
UTF-8下的一个测试结果:
请输入字符串:(输入'#'结束为结束程序)
ab你好
请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):
4
ab
你
好
今天就先到这里了。
Java---练习(面试题) :字符串截取(1)的更多相关文章
- 关于Java和JavaScript对字符串截取处理的总结
在JavaWeb开发中,经常需要对字符串进行处理,包括Java语言和JS语言,总是容易弄混淆,这里简单对比一下两种语言对于字符串截取方法. 一.先看Java public class StringDe ...
- Java中怎样实现字符串截取
使用substring()对字符串进行截取: /** * str.indexOf()查找下标 * substring();//字符串截取 * length();//字符串长度 * */ @Test p ...
- java 字符串截取的几种方式(转)
众所周知,java提供了很多字符串截取的方式.下面就来看看大致有几种. 1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的 ...
- c#中字符串截取使用的方法
AndyZhang welcome to java world c#中字符串截取使用的方法 String substring(int beginIndex) String substring(int ...
- java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- java中常用的字符串的截取方法
java中常用的字符串的截取方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...
- java 字符串截取 - 最后带上mysql字符串截取比较
Java中的substring()方法有两个方法的重载,一个带一个参数的,一个带两个参数的. 第一种写法: substring(n);//从索引是n的字符开始截取,条件(n>=0,n<字符 ...
- mysql截取函数常用方法 即mysql 字符串 截取-- - 最后带上java字符串截取规则比较
常用的mysql截取函数有:left(), right(), substring(), substring_index() 下面来一一说明一下: 1.左截取left(str, length) 说明:l ...
- java 字符串截取的方法
1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时. String str = " ...
随机推荐
- 《Android开发艺术探索》读书笔记 (10) 第10章 Android的消息机制
第10章 Android的消息机制 10.1 Android消息机制概述 (1)Android的消息机制主要是指Handler的运行机制,其底层需要MessageQueue和Looper的支撑.Mes ...
- java中的泛型(转)
什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个 ...
- 关于c#流
C#流的简单认识 前言 本篇文章简单总结了在C#编程中经常会用到的一些流.比如说FileStream.MemoryStream. BufferedStream. NetWorkStream. Str ...
- 关于html水平垂直居中的一些总结吧
html水平垂直居中 最近遇到很多居中的问题,就花点时间总结了一下放在这里,以后找也方便,0.0~~ 1.居中文本 <div class="wrap"> 我在中间…… ...
- android - INSTALL_FAILED_MEDIA_UNAVAILABLE
解决方案是将'AndroidManifest.xml'设置 'installLocation'的属性为'auto'即可.
- 在Xcode7中安装Alcatraz(Xcode插件管理, 字体主题等)
第一步:关闭 Xcode.第二步:如果你之前安装过Alcatraz,卸载它.在终端运行命令: rm -rf ~/Library/Application\ Support/Developer/Share ...
- IOS 真机调试以及发布应用 2
参考网站:http://my.oschina.net/u/1245365/blog/196420 已经有开发证书的直接跳过第一步 第一步:申请“开发证书” 进入苹果开发者99美元账号: 选择:Cert ...
- Selenium 下载URL
http://mvnrepository.com/artifact/org.seleniumhq.selenium
- 百度分享share.js插件
//百度分享window._bd_share_config = { common : { bdText : '分享标题', bdDesc : '分享描述', bdUrl : '分享链接', bdPic ...
- hibernate的get、load的方法的区别,IllegalArgument异常
关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后 ...