在Java web应用中,处理字符串是用stringbuffer还是stringbuilder

两者之间的差别就在于线程安全的问题上。一直都搞不明白,在web应用中多次请求同一个方法,需不需要考虑线程安全问题。
在这种情况下,是需要使用哪一个。是不是还应该分局部变量和全局变量来说。
刚接触这个,求大神们解答,实在搞混了

2个回答

StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
分局和全局暂且还没有考虑
!!

StringBuilder:线程非安全的

StringBuffer:线程安全的
多线程中访问的话,用StringBuffer吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
反编译字符串连接的class文件显示字符串连接用的是StringBuffer
图片是两个字符串连接“chi”+"na",反编译后应该是StringBuilder的append方法吧? 为啥变成了StringBuffer?我是不是用了假的JDK?这是jdk1.8.0_101 ![图片说明](https://img-ask.csdn.net/upload/201702/07/1486469130_383131.jpg)
StringBuffer类比String类更高效地存储字符串还是更高效的追加字符串
昨天考试出了这道么一道选择题:其中两个选项,一个是stringbuffer比String更高效的追加字符串,一个是stringbuffer比String更高效的存储字符串, 我想问一下正确答案应该是哪个,为什么?谢谢
从键盘输入一个字符串和一个字符,从字符串中删除全部该字符(如果是字母,大小写都删除)
package lab; /** * * @author Administrator */ import java.util.Scanner; public class Lab { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Scanner scan = new Scanner(System.in); System.out.print("请输入原字符串:"); String s = scan.nextLine();//字符串 StringBuffer sNew = new StringBuffer(s);//把输入的字符串类型从String转化为StringBuffer System.out.print("请输入待删除字符:"); char a = scan.nextLine().charAt(0);//字符 for (int i = 0; i < s.length(); ++i) { if (a >= 'a' && a <= 'z' && a == s.charAt(i)) { String str = s.replace((char) (a - 32), a);//把满足要求的替换成a,前面已经定义过s,所以定义str,我认为两者相同,字符串 sNew = new StringBuffer(str);//把str转化成StringBuffer类,前面已经定义过sNew类型,字符串 } if (a >= 'A' && a <= 'Z' && a == s.charAt(i)) { String str = s.replace((char) (a + 32), a);//满足要求的替换成a,字符串 sNew = new StringBuffer(str);//把str转化成StringBuffer类,字符串 } } StringBuffer s1 = new StringBuffer("");//初始化定义StringBuffer类s1 for (int i = 0; i < s.length(); ++i) {//sNew,s1 if (sNew.charAt(i) != a) { s1.append(sNew.charAt(i)); } } System.out.println("删除后的结果:" + s1); System.out.println("共删除"+(sNew.length()-s1.length())+"个字符"+a); } } 是不是复杂化了,写的时候感觉混乱。
关于java中字符串处理问题
请教:多个作者分行显示 <br />Author - {...} <br />Author - {...} <br />Author - {...} <br /> <br />我想把多个作者名作为一个字符串赋给一个变量author,应该怎么处理呢? <br /> <br />我的方法(本人初学java,望见谅): <br />String[] input = readAllFile(f).split("}"); <br /> <br />for (int i = 0; i &lt; input.length; i++) { <br /> <br />String re = input[i].replace(",", " ").trim(); <br /> if (re.startsWith("Author")) { <br />// 需要修改 <br />// 把多个author放在??中?怎样计算“Author”出现次数? <br />                                        <br />    StringBuffer au = new StringBuffer(); <br />       String author = au.append(input.substring(input.indexOf("-") + 2)).toString(); <br />       System.out.println(author);   //输出:多个作者名,每个名字占一行 <br />       GlobalMode.put("author", author);        //只输出最后一个作者名 <br />} <br /> <br />注:之前定义的:  HashMap&lt;string, string=""&gt; GlobalMode = new HashMap&lt;string, string=""&gt;(); <br />请问:author应该是字符串吧,可是为什么GlobalMode.put("author", author);时只输出最后一个作者名呢?不解..请各位给予指点,不胜感激! <br /> <br /><br /><strong>问题补充:</strong><br />我想把多个作者名当成一个字符串,然后赋给“author”,应该怎么修改GlobalMode.put("author", author)才不会只输出最后一个作者名呢? <br />
取出Stringbuffer.append中的指定字符串。
客户端StringBuffer sb = new StringBuffer(); 1. sb.append("Content-Disposition: form-data; name=\"img\"; filename=\""+file.getName()+"\""+LINE_END); 2. sb.append(itemId) ;//itemId是int类型,已定义 3. sb.append("Content-Type: application/octet-stream; charset="+CHARSET+LINE_END); 4.dos.write(sb.toString().getBytes()); 服务器端try { 1.List<FileItem> items = this.upload.parseRequest(request); 2.if(items!=null && !items.isEmpty()){ 3.for (FileItem fileItem : items) { 4.String filename=fileItem.getName(); 5. String itemId=fileItem.getString();//拿出传过来的itemId 为什么客户端第4句定义了itemid,在服务器端第5句拿出的是乱码?
Java字符串比较问题(好人为什么)
将回文转换为一个字符串后,反转此字符串,比较这两个字符串却不想等,求问什么? String number1 = String.valueOf(number); String number2 = new StringBuffer(number1).reverse().toString(); boolean answer = (number1 == number2 ) ? true : false ; System.out.print(answer); return answer ;
java中charAt()方法中字符串越界
目标:写一个micro词法分析器 问题:在读入写有micro代码文件的过程中,到最后一个字符(例如37)的时候报错。 报错信息: ``` Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 37 at java.lang.StringBuffer.charAt(Unknown Source) at Analyzer.getChar(Analyzer.java:34) at Analyzer.analyse(Analyzer.java:203) at Analyzer.main(Analyzer.java:231) ``` 代码: ``` //getChar()方法 public void getChar() { ch = buffer.charAt(i); i++; } //在主函数中 if (isLetter()) { // (一)如果ch为字母 while (isLetter() || isDigit()) { concat(); getChar(); } //省略... } ``` 已更新全部代码: ``` import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Analyzer { private String keyWords[] = { "int", "begin", "end", "read", "write" }; // 关键字数组 private char operators[] = { '=', '+', '-' }; // 运算符数组 private char separators[] = { ',', ';', '(', ')' }; // 分隔符数组 private String fileSrcName; // 源程序名 private StringBuffer buffer = new StringBuffer(); // 缓冲区 private char ch; // 字符变量,存放最新读进的源程序字符 private static int i = 0; private static int ketType;// 作返回值,用于调用不同的打印的方法 private String strToken; // 字符数组,存放构成单词符号的字符串 public Analyzer() { } public Analyzer(String fileSrcName) { this.fileSrcName = fileSrcName; } /** * 将下一个输入字符读到ch中,搜索指示器前移一个字符 比如字符串的长度是6 但是每个字符的下标是从0开始计算 0 1 2 3 4 5 * 所以charAt(i)中的i最大是字符串长度-1. 你在do while循环里有个i++,i 如果等于5的时候,在charAt(i)就明显越界了 */ public void getChar() { if (i < buffer.length()) {// i<6 ch = buffer.charAt(i); if (i != buffer.length()-1) { i++; } } } /** * 检查ch中的字符是否为空白,若是则调用getChar() 直至ch中进入一个非空白字符 */ public void getBc() { while (Character.isSpaceChar(ch)) getChar(); } /** * 将ch连接到strToken之后 */ public void concat() { strToken += ch; } /** * 判断字符是否为字母 */ boolean isLetter() { return Character.isLetter(ch); } /** * 判断字符是否为数字 */ boolean isDigit() { return Character.isDigit(ch); } /** * 将搜索指示器回调一个字符位置,将ch值为空白字 */ public void retract() { i--; ch = ' '; } /** * 判断单词是否为关键字 [1,5] */ public int isKeyWord() { ketType = -1; for (int i = 0; i < keyWords.length; i++) { if (keyWords[i].equals(strToken)) ketType = i + 1; } return ketType; } /** * 判断是否为运算符 [6,9) 678 */ public int isOperator() { ketType = -1; for (int i = 0; i < operators.length; i++) { // 例如operators[]有 = + -,那么operators[1] = ‘+’ // 如果调用此方法判断是否为+,则当前i遍历的0、1 // 返回的种别码ketType为1+6=7 // 符合一开始设定的种别码表 if (ch == operators[i]) ketType = i + 6; } return ketType; } /** * 判断是否为分隔符 [9,13) 9 10 11 12 */ public int isSeparators() { ketType = -1; for (int i = 0; i < separators.length; i++) { if (ch == separators[i]) ketType = i + 9; } return ketType; } /** * 打印关键字strToken */ public void insertKeyWords(String strToken) { // System.out.print("关键字,种别[1,5]"); System.out.println("(" + ketType + "," + strToken + ")"); } /** * 打印运算符ch * */ public void insertOperators(char ch) { // System.out.print("运算符,种别 [6,9)"); System.out.println("(" + ketType + "," + ch + ")"); } /** * 打印分隔符 */ public void insertSeparators() { // System.out.print("分隔符,种别 [9,13)"); System.out.println("(" + ketType + "," + ch + ")"); } // 打印常数strToken public void insertConst(String strToken) { int num = Integer.parseInt(strToken); // System.out.print("常数,种别13"); System.out.println("(" + 13 + "," + strToken + ")"); } /** * 打印标识符(ID) */ public void insertId(String strToken) { // System.out.print("标识符,种别14"); System.out.println("(" + 14 + "," + ch + ")"); } /** * 将源程序读入到缓冲区中 */ public void readFile() { try { FileReader fis = new FileReader(this.fileSrcName); BufferedReader br = new BufferedReader(fis); String temp = null; while ((temp = br.readLine()) != null) { buffer.append(temp); } } catch (FileNotFoundException e) { System.out.println("源文件未找到!"); e.printStackTrace(); } catch (IOException e) { System.out.println("读写文件出现异常!"); e.printStackTrace(); } } /** * 词法分析 */ public void analyse() { strToken = ""; // 置strToken为空串 while (i < buffer.length()) { getChar(); getBc(); if (isLetter()) { // (一)如果ch为字母 while (isLetter() || isDigit()) { concat(); getChar(); } retract(); // 回调 if (isKeyWord() > 0) { // 如果是为关键字,则保留字 insertKeyWords(strToken); } else { // 否,则 符号 insertId(strToken); } strToken = ""; } else if (isDigit()) { // (二)如果ch为数字 while (isDigit()) { concat(); getChar(); } retract(); // 回调 insertConst(strToken); // 是常数 strToken = ""; } else if (isOperator() > 0) { // 是运算符 insertOperators(ch); } else if (isSeparators() > 0) { // 是分隔符 insertSeparators(); } } } public static void main(String[] args) { Analyzer alr = new Analyzer("./src/input.txt");// 文件路径 alr.readFile(); alr.analyse(); /* * System.out.println("关键字,种别[1,5] 12345"); System.out.println( * "运算符,种别 [6,9) 678"); System.out.println("分隔符,种别 [9,13) 9 10 11 12 "); * System.out.println("常数,种别13"); //System.out.println("标识符(ID),种别14"); */ } } ```
android 不断更新的字符串想要删除固定位置的字符
字符串内容不断变化,长度始终一致,想要删除前两位字符,开始用stringBuffer的delete方法,已下载到手机打开软件就出现错误。如果用append方法不会,该如何解决呢?
关于java中StringBuffer值传递的问题
上代码 public class PassTest2 { public static void operate1(String a,String b){ a=a+b; System.out.println("1中的a:"+a); b=a; System.out.println("1中的b:"+b); } public static void operate2(StringBuffer a,StringBuffer b){ b = a.append(b); // System.out.println("2中的a的类型:"+a.getClass().getName()); System.out.println("2中的a:"+a); // b=a; // System.out.println("2中的b的类型:"+b.getClass().getName()); System.out.println("2中的b:"+b); // b.append("x"); } public static void main(String[] args) { String a = "a"; String b = "b"; operate1(a, b); StringBuffer x = new StringBuffer("x"); StringBuffer y = new StringBuffer("y"); operate2(x, y); // System.out.println(a + "," + b); System.out.println(x + "," + y); } } 执行结果是: 1中的a:ab 1中的b:ab 2中的a:xy 2中的b:xy xy,y 最后y的值为y没有理解
java中,String类和StringBuffer类与StringBuilder类
java中,String类和StringBuffer类与StringBuilder类,这三个类的异同点在哪里
java中String字符串==的疑问?
java中String字符串==的疑问?谁能帮忙解释和理解一下!顺便说一下底层的原理和运行规则? 直接po代码和截图 ``` public class TestString { /** * 测试String */ public static void main(String[] args) { String a = "hello2"; final String b = getStr2(); String c = b + 2; String d = "hello2"; String e = new String("hello2"); String f = new String("hello2"); String h = "hello"; String j = h + 2; StringBuffer sb = new StringBuffer("hello2"); StringBuilder sb2 = new StringBuilder("hello2"); String k = getStr2(); String m = k + 2; System.out.println("c结果" + (a == c)); System.out.println("d结果" + (a == d)); System.out.println("e结果" + (a == e)); System.out.println("f结果" + (a == f)); System.out.println("f.toString()结果" + (a == f.toString())); System.out.println("j结果" + (a == j)); System.out.println("sb.toString()结果" + (a == sb.toString())); System.out.println("sb2.toString()结果" + (a == sb2.toString())); System.out.println("m结果" + (a == m)); } public static String getStr() { String text = "hello"; return text; } public static String getStr2() { return "hello"; } } ``` ![图片说明](https://img-ask.csdn.net/upload/201812/29/1546070226_736593.png) ![图片说明](https://img-ask.csdn.net/upload/201812/29/1546070234_669232.png)
java中string和stringbuffer的区别
package om.yuanguang; public class TestString { public static void main(String[] args) { StringBuffer s0 = new StringBuffer("A"); StringBuffer s1 = new StringBuffer("B"); comp(s0,s1); System.out.println(s0+"---"+s1); } public static void comp(StringBuffer s0,StringBuffer s1){ s0.append(s1); s1 = s0; } } 求结果及具体的分析过程、原理
get请求,参数拼接,时间字符串拼接报错,然后大佬们说的我好想不太清楚咋弄,就新添了请求方法,和调用
java.io.IOException: Server returned HTTP response code: 400 for URL: http://api.baidu.com/getsyncusers?code=02&date=2019-10-10 10:16:00.0 at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) at com.dunan.zzjg.util.ApiGateToken.getResponseContext(ApiGateToken.java:115) at com.dunan.zzjg.service.impl.SysUserServiceImpl.setSyncUsers(SysUserServiceImpl.java:82) at com.dunan.zzjg.controller.DAapiController.userDate(DAapiController.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) /** * 根据请求地址及请求参数,获取服务器的相应信息 * * @param requestURL 请求地址 * @param requestParam 请求参数 * @param requestMethod "POST" or "GET" * @return */ public static String getResponseContext(String requestURL, String requestParam, String requestMethod,String token) { StringBuffer responseContext = new StringBuffer(); try { URL url = new URL(requestURL); // 此处的urlConnection对象实际上是根据URL的 URLConnection urlConn = url.openConnection(); urlConn.setConnectTimeout(30000); urlConn.setReadTimeout(30000); // 请求协议(此处是http)生成的URLConnection类 的子类HttpURLConnection,故此处最好将其转化 // 为HttpURLConnection类型的对象,以便用到 HttpURLConnection更多的API.如下: HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConn; // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true); // Post 请求不能使用缓存 httpUrlConnection.setUseCaches(false); // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type","application/json"); // 设置 HttpURLConnection的字符编码 httpUrlConnection.setRequestProperty("Accept-Charset", "UTF-8"); if(StringUtils.isNotBlank(token)){ httpUrlConnection.setRequestProperty("Access-Token", token); } // 设定请求的方法为"POST",默认是GET httpUrlConnection.setRequestMethod(requestMethod); // 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成, // // 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, // // 所以在开发中不调用上述的connect()也可以)。 if("POST".equals(requestMethod)){ OutputStream outStrm = httpUrlConnection.getOutputStream(); outStrm.write(requestParam.getBytes("UTF-8")); // // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) outStrm.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 outStrm.close(); } // 调用HttpURLConnection连接对象的getInputStream()函数, // 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 InputStream inStrm = httpUrlConnection.getInputStream(); // 读取文件流程 BufferedReader rd = new BufferedReader( new InputStreamReader(inStrm,"UTF-8")); // 采取行的方式进行读取 String tempLine = rd.readLine(); // 循环获取每一行数据 while (tempLine != null) { responseContext.append(tempLine); tempLine = rd.readLine(); } rd.close(); inStrm.close(); httpUrlConnection.disconnect(); httpUrlConnection = null; urlConn = null; url = null; } catch (Exception e) { e.printStackTrace(); } return responseContext.toString(); } /*获取上次更新的时间*/ TurnoverTime lastTime = timeMapper.selectTime(); String lastUpdateTime = lastTime.getLastUpdateTime(); System.out.println(lastUpdateTime); String url = "http://api.baidu.com/getsyncusers"; String param = "?code="+"02"+"&date="+lastUpdateTime; String requestMethod = "GET"; String token = ApiGateToken.getToken(); String responseContext = ApiGateToken.getResponseContext(url+param, param, requestMethod, token);
Java的StringBuilder和StringBuffer的区别是什么?它们的使用分别有什么用?
Java的StringBuilder和StringBuffer的区别是什么?它们的使用分别有什么用?
字符串逆序输出,并判断前后是否相等
package lab10_4; /** * * @author Administrator */ import java.util.Scanner; public class Lab10_4 { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Scanner scan=new Scanner(System.in); System.out.print("请输入一个字符串:"); StringBuffer s=new StringBuffer(scan.nextLine()); System.out.print("逆序后的字符串是:"); StringBuffer s1=new StringBuffer(""); for( int i=s.length()-1;i>=0;--i){ System.out.print(s.charAt(i)); s1.append(s.charAt(i)); } s1.toString(); s.toString(); System.out.println(); System.out.print(s.equals(s1)); } } ![图片说明](https://img-ask.csdn.net/upload/201604/26/1461639254_62152.png) 为什么输出的是false
用java字符串方法去除HTML代码标签的问题
比如有这样的html代码: [code="java"] <div id="mini_nav_qq"><li><a target="_top" href="http://lady.qq.com/emo/emotio.shtml">情感</a></li><li><a target="_top" href="http://lady.qq.com/beauty/beauty.shtml">美容</a></li></div> [/code] 想要实现把<a>、<div>等标签中的“target”、“href”、"id"、"style"等信息去除,只留下单纯的<a>、<div>形式。我用了java字符串匹配替换的方法: [code="java"] private static String removeInTag(String a) { StringBuffer aaa = new StringBuffer(); aaa.append(a); int BeginIndex = 0; while(BeginIndex != -1){ BeginIndex = aaa.indexOf("<",BeginIndex); int StarIndex = aaa.indexOf(" ", BeginIndex); int EndIndex = aaa.indexOf(">", BeginIndex); int PreventErr = aaa.indexOf("<", BeginIndex); if ((PreventErr > EndIndex) && (StarIndex > StarIndex)){ aaa.replace(StarIndex, EndIndex, ""); } } return aaa.toString(); } [/code] 但出现了死循环,死循环的原因何在? 同时由于本人初学java,所以这个方法可能不是最好方法,有没有更高效、更不易出错的方法呢?谢谢!
实现操作系统页面置换算法,调用的ListUtils.java中的代码都是什么意思?能否帮忙解释一下原理?
我在用Java做操作系统中的页面置换算法,实现FIFO,CLOCK和LRU这三种算法,在这三个算法实现的过程中,都调用了ListUtils.java,但是我不懂ListUtils.java中的代码是什么意思,导致我其他的代码也看不懂。向各位大神请教一下,能否解释一下ListUtils.java中代码的含义和原理?感谢感谢! 另外在算法中的 Object[] strList = list.toArray(); for(int column = 0; column < list.size(); column++) { FIFOData[column][i+1] = strList[column]; } 这两行代码是什么意思呢?我看在每一个页面置换算法中都有这两行代码,但是我看不懂!麻烦各位大佬帮忙看一下!万分感谢! 下面贴上代码: ListUtils.java ``` package utils; import java.util.List; public class ListUtils { public ListUtils() { } /** * 输出 * @param list 将List转为数组并输出, out: 2, 3, 4 * @return */ public static String listToString(List list){ StringBuffer content = new StringBuffer(); for(int i = 0; i < list.size(); i++){ content.append(list.get(i)); if(i < list.size() - 1){ content.append(","); } } return content.toString(); } /** * 在list中查找是否有str * @param list * @param str * @return */ public static boolean find(List<String> list, String str){ boolean flag = false; for(String lis : list){ if(lis.equals(str)){ flag = true; } } return flag; } /** * 在List中查找是否有String,如果有返回下标, 否则返回 -1 * @param list * @param str * @return */ public static int findIndex(List<String> list, String str) { int index = 0; for(String lis : list) { if(lis.equals(str)) { return index; } index++; } return -1; } public static boolean clockJudge(String[] clock, int index) { if(clock[index].equals("0")) { return true; } return false; } /** * * @param index 下标 * @param clock 时钟 * @param range 当前使用内存块 * @return */ public static int findZero(int index, String[] clock, int range) { while(true) { if(clock[index].equals("0")) { break; }else { clock[index] = "0"; index++; if(index > range-1) { index = Math.abs(range - index); } } } return index; } /** * 在数组中查找是否存在该字符串 * @param obj * @param str * @return */ public static boolean strJudge(Object[] obj, String str) { boolean flag = false; if(obj == null) { return flag; } for(int i = 0; i < obj.length; i++) { if(str.equals(obj[i])) { flag = true; break; } } return flag; } /** * 获取二维数组中同一列的行的长度 * @param str 数据 * @param length 二维数组的列 * @param memory 内存块 * @return * */ public static int findNull(Object[][] str, int length, int memory) { int index = 0; if(str == null) { return -1; } for(int i = 0; i < memory; i++) { if(str[i][length] != null) { index = i; } } return index; } } ``` 在FIFO中调用: ![图片说明](https://img-ask.csdn.net/upload/201912/16/1576503707_674210.png) 在URL中调用: ![图片说明](https://img-ask.csdn.net/upload/201912/16/1576503832_866034.png) 在Clock中调用: ![图片说明](https://img-ask.csdn.net/upload/201912/16/1576503948_604271.png)
java语言中String和StringBuffer的区别是什么?
StringBuffer在实际开发中有用么? 如题如题如题如题如题如题如题如题如题如题如题如题
StringBuffer的中的append问题
public class Test2 { public static void main(String[] args) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); menthod(a, b); System.out.println(a + "," + b); } static void menthod(StringBuffer x, StringBuffer y) { x.append(y); y = x; } } 为什么输出结果是AB,B啊?
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
前端 | 2. 正则
转载请注明以下: 本文转自清自以敬的博客:https://blog.csdn.net/qq_45791147 文章目录1.转义2.正则表达式初步2.1.匹配字符2.1.1.组成元素2.1.2.基础正则的设计 1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转义...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器。但是docker本身和虚拟机还是有较为明显的出入的。我大致归纳了一下,可以总结为以下几点: docker自身也有着很多的优点,关于它的优点,可以总结为以下几项: 安装docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Doc...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问