发表于: 2017-11-28 23:09:06

1 666


今天做的事情:


                   早上看一会程序员面试文档,题目要求是这样的:截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉子不被截半个,例如“人ADC”4,应该截为“人AB”,输入“人ABC们DEF”,6,应该输出为“人ABC”而不是“人ABC”+们的半个。


                   答案:在java语言中,默认使用的Unicode编码方式,即每个字符占用两个字节,因此可以用来存储中文,String虽然是由char所组成的,但是它采用了一种更加灵活的方式来存储,即英文占用一个字符,中文占用两个字符。采用这种存储方式的一个重要作用就是可以减少所需的存储空间,提高存储效率。


                   测试代码:

                              

//判断字符c是否是中文字符,如果是返回true

public static boolean isChinese(char c) {
String sb = String.valueOf(c);
return sb.getBytes().length > 1 ? true : false;
}

public String truncateStr(String str, int len) {
if (str == null || str.equals("") || len == 0)
return "";
char[] chrArr = str.toCharArray();

StringBuilder sb = new StringBuilder("");
int count = 0; // 用来记录当前截取字符的长度

   for (char cc: chrArr)
{
if (count < len) {
if (isChinese(cc)) {
//如果要求截取子串的长度只差一个字符,但是接下来的字符是中文,
               // 则截取结果子串中不保存这个中文字符
               if (count + 1 == len)
return sb.toString();
count = count + 2;
sb = sb.append(cc);
}else{
count = count + 1;
sb = sb.append(cc);
}
} else {
break;
}
}
return sb.toString();
}

public static void main(String[] args) {
Test splitStr = new Test();
String sb = "人ABC们DEF";
System.out.println(splitStr.truncateStr(sb, 4));
}

                    控制台信息:

   
                

                   一个中文占两个字节,输入6,应该是截取到 半个 '们' ,使用以上代码,就可以避免截取半个中文情况。

              

                    使用七牛云进行上传图片测试,在这里看了志勇的视频,讲解的很详细,根据这个我测试成功,回过头来想想,确实忽略了一些东西,还有就是初步接触这些,有些措手不及,现在的话,对人家给的SDK文档,感觉什么都给你写好了,调用就可以,已经很简化了,自己需要就是认真阅读使用就好了。



                   使用七牛云,先加入依赖

<!-- 七牛云上传-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>happy-dns-java</artifactId>
<version>0.1.4</version>
<scope>compile</scope>
</dependency>


                  再复制代码测试:

                 

public static void main(String[] args) {
//打开文件管理器 进行选择照片上传
   try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {
e.printStackTrace();
}
JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);
String filePath = "" + fileChooser.getSelectedFile();
String fileName = "" + fileChooser.getSelectedFile().getName();
System.out.println("选择文件路径: " + filePath);
System.out.println("选择文件的文件名: " + fileName);

String newURL = filePath.replaceAll("\\\\","/");
System.out.println("转义后的文件路径:" + newURL);


//构造一个带指定Zone对象的配置类
   Configuration cfg = new Configuration(Zone.zone1());
//...其他参数参考类注释

   UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
   String accessKey = "你的AK";
String secretKey = "你的MK";
String bucket = "dabaixiong";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
 //  String localFilePath = "D:\\飞秋下载之图片\\守望先锋壁纸\\2016061717189080.jpg";
   String localFilePath =newURL;
//默认不指定key的情况下,以文件内容的hash值作为文件名
   String key = "16.jpg";

Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);

try {
Response response = uploadManager.put(localFilePath, key, upToken);
//解析上传成功的结果
       DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
           ex2.printStackTrace();
}
}

}


                  看着代码挺多,有点虚,其实跑起来,再认真看一看,大致理解,就可以开始应用到自己项目中。


                 这是上传的图片,可以指定名称,也可以默认为上传的。



                   最后测试生成的6位随机数。

                 

public static void main(String[] args) {
for (int i =0 ; i < 1000 ; i++){
Integer j = (int) ((Math.random()*9+1)*100000);
System.out.println(i+"-"+j);
}

}

                   循环1000次

                

               结论是:准确生成6位数,无错误。



 收获:


               今天是临时放假一天,所以学的有点少,明天开始整合在项目里面,在完成官网所要求的,开始下一任务。




返回列表 返回列表
评论

    分享到