重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用imageIO 读取进入BufferedImage,检测图片非空白大小,建立新的BufferedImage,拷贝非空白区至新的BufferedImage, 用imageIO 再次保存。
十余年的章丘网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整章丘建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“章丘网站设计”,“章丘网站推广”以来,每个客户项目都认真落实执行。
你的问题在于转义的双引号字符串内的分号不应该拿来分割。未解决这个问题只能将转义的部分单独截取出来,不参与分割,等其他部分分割结束后,再将转义的内容拼接进去即可。
为防止双引号转义符内部还有其他双引号转义符\"的影响,对\\\"用#@#占位符将之替换。
需要引入第三方工具类辅助进行占位符替换:
import org.apache.commons.lang3.StringUtils;
依赖为:
dependency
groupIdorg.apache.commons/groupId
artifactIdcommons-lang3/artifactId
version3.3.2/version
/dependency
代码为:
public class Main {
public static void main(String[] args) {
String a = "String a = \";\";String b = \"aaaa\";";
String b = "String a = \"\\\";\";String b = \"aaaa\";";
System.out.println(codeSplit(a));
System.out.println(codeSplit(b));
}
private static ListString codeSplit(String a){
//排除双引号转义符内部还有其他双引号转义符\"的影响,用“#@#”占位符将之替换
a = StringUtils.replace(a, "\\\"", "#@#");
ListString result = new ArrayList();
boolean start = true;//检查双引号转义符,为true时代表找到双引号转义符的左转义符,为false时代表找到双引号转义符的右转义符
while (a.indexOf("\"") 0) {
int index = a.indexOf("\"");//index:双引号左转义符位置
//发现双引号转义符时,将当前字符串的(0 至 index + 1)字符截取出来作为tmp
String tmp = a.substring(0, index + 1);
a = a.substring(index + 1);//将截取剩下的部分重新赋值给原字符串
if (start) {
//发现双引号转义符的左转义符,对tmp字符串按分号进行分割,将不为空的结果添加到结果集中
String[] stArr = tmp.split(";");
for (String s : stArr) {
if (s.length() 0) {
result.add(s);
}
}
} else {
//发现双引号转义符的右转义符,不进行分割,将tmp字符串拼接到结果集的最后一个字符串中
String end = result.get(result.size() - 1);
end += tmp;
result.remove(result.size() - 1);
result.add(end);
}
start = !start;//转置双引号转义符标志,正常情况下双引号转义符必须成对出现,否则将得到预期外的结果
}
//跳出循环后对剩余的a字符串再做一次分割
String[] stArr = a.split(";");
for (String s : stArr) {
if (s.length() 0) {
result.add(s);
}
}
//将结果集内的“#@#”占位符还原为\"
return result.stream().map(s - StringUtils.replace(s, "#@#", "\\\"")).collect(Collectors.toList());
}
}
运行结果:
java将字符串每隔2个分割并用空格隔开存入数组的例子如下:
String str = "abcdefchakdjfkdjfks";//字符串
int m=str.length()/2;
if(m*2str.length()){
m++;
}
String[] strs=new String[m];
int j=0;
for(int i=0;istr.length();i++){
if(i%2==0){//每隔两个
strs[j]=""+str.charAt(i);
}else{
strs[j]=strs[j]+" "+str.charAt(i);//将字符加上两个空格
j++;
}
}
System.out.println(Arrays.toString(strs));
}
substring讲解:
s=s.substring(int begin);截取掉s从首字母起长度为begin的字符串,将剩余字符串赋值给s;
s=s.substring(int begin,int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;
split讲解:
java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]])
参数
stringObj
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽
略该选项,返回包含整个字符串的单一元素数组。
limit
可选项。该值用来限制返回数组中的元素个数。
说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解
。separator 不作为任何数组元素的部分返回。
split 的实现直接调用的 matcher 类的 split 的方法。“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。
Java代码
public static void main(string[] args) {
string value = "192.168.128.33";
string[] names = value.split("\\.");
for (int i = 0; i names.length; i++) {
system.out.println(names[i]);
}}
如果用竖线“|”分隔的话,将出现不可得到的结果,必须改为“\\|”