精华内容
下载资源
问答
  • java中定义字符串数组

    2020-03-07 16:57:32
    各位大佬,java中怎么实现定义一个字符串数组,让每个索引对应一句话呀?(初学者(*^▽^*))3q~~
  • java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗。 这些是我要研究的方法: 使用+运算符 ...

    java字符连接字符串数组

    最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利?

    这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗。 这些是我要研究的方法:

    1. 使用+运算符
    2. 使用StringBuilder
    3. 使用StringBuffer
    4. 使用String.concat()
    5. 使用String.joinString.join新增功能)

    我还尝试了String.format()但是它是如此缓慢,以至于我暂时不在本文中介绍。

    在继续之前,我们应该分离两个用例:

    1. 将两个字符串串联在一起作为一个调用,例如在日志消息中。 由于这只是一个电话,您可能会认为性能几乎不是问题,但结果仍然很有趣,并且可以阐明该主题。
    2. 在一个循环中连接两个字符串。 在这里,性能更是一个问题,尤其是当循环很大时。

    我最初的想法和问题如下:

    1. +运算符是用StringBuilder实现的,因此至少在连接两个String的情况下,它应产生与StringBuilder类似的结果。 幕后到底发生了什么?
    2. 在所有类的设计目的都是为了连接Strings并取代StringBuffer之后,StringBuilder应该是最有效的方法。 但是,与String.concat()相比,创建StringBuilder的开销是多少?
    3. StringBuffer是连接字符串的原始类–不幸的是,其方法是同步的。 确实不需要同步,随后它被不同步的StringBuilder代替。 问题是,JIT是否优化了同步?
    4. String.concat()应该适用于2个字符串,但是在循环中是否可以正常工作?
    5. String.join()比StringBuilder具有更多的功能,如果我们指示它使用空的定界符来连接String,它将如何影响性能?

    我要解决的第一个问题是+运算符的工作方式。 我一直都知道它在幕后使用了StringBuilder,但是要证明这一点,我们需要检查字节码。

    如今 ,查看字节码最简单的方法是使用JITWatch ,这是一个非常出色的工具,旨在了解JIT如何编译您的代码。 它有一个很棒的视图,您可以在其中与字节码(如果要转到该级别,还可以是机器码)并排查看源代码。

    屏幕截图2015-02-17 at 17.27.46

    这是一个非常简单的方法plus2()的字节码,我们可以看到确实在第6行上创建了一个StringBuilder,并附加了变量a(第14行)和b(第18行)。

    我认为将其与StringBuffer的手工使用进行比较会很有趣,因此我创建了另一个方法build2(),结果如下。

    屏幕截图2015年2月17日在17.31.37

    此处生成的字节码不如plus()方法那么紧凑。 StringBuilder存储在变量高速缓存中(第13行),而不是仅留在堆栈上。 我不知道为什么会这样,但是JIT也许可以做到这一点,我们将不得不看看时机如何。

    无论如何,如果用plus运算符和StringBuilder将2个字符串连接在一起的结果显着不同,那将是非常令人惊讶的。

    我写了一个小型的JMH测试来确定不同方法的执行方式。 首先让我们看一下两个Strings测试。 参见下面的代码:

    package org.sample;
    
    import org.openjdk.jmh.annotations.*;
    import org.openjdk.jmh.infra.Blackhole;
    
    import java.util.UUID;
    import java.util.concurrent.TimeUnit;
    
    @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    @Fork(1)
    @State(Scope.Thread)
    public class LoopStringsBenchmark {
    
        private String[] strings;
    
        @Setup
        public void setupTest(){
            strings = new String[100];
            for(int i = 0; i<100; i++) {
                strings[i] = UUID.randomUUID().toString().substring(0, 10);
            }
        }
    
        @Benchmark
        public void testPlus(Blackhole bh) {
            String combined = "";
            for(String s : strings) {
                combined = combined + s;
            }
            bh.consume(combined);
        }
    
        @Benchmark
        public void testStringBuilder(Blackhole bh) {
            StringBuilder sb = new StringBuilder();
            for(String s : strings) {
                sb.append(s);
            }
            bh.consume(sb.toString());
        }
    
        @Benchmark
        public void testStringBuffer(Blackhole bh) {
            StringBuffer sb = new StringBuffer();
            for(String s : strings) {
                sb.append(s);
            }
            bh.consume(sb.toString());
        }
    
        @Benchmark
        public void testStringJoiner(Blackhole bh) {
            bh.consume(String.join("", strings));
        }
    
        @Benchmark
        public void testStringConcat(Blackhole bh) {
            String combined = "";
            for(String s : strings) {
                combined.concat(s);
            }
            bh.consume(combined);
        }
    }

    结果如下:

    屏幕+截图+ 2015-02-17 + at + 17.41.26

    显而易见的赢家是String.concat()。 毫不奇怪,因为它不必为每次调用创建StringBuilder / StringBuffer而付出性能损失。 虽然确实需要每次都创建一个新的String(这将在以后变得很重要),但是对于连接两个Sting的非常简单的情况,它更快。

    另一点是,尽管产生了额外的字节码,但正如我们预期的那样,plus和StringBuilder是等效的。 StringBuffer仅比StringBuilder慢一点,这很有趣,这表明JIT必须做一些魔术来优化同步。

    下一个测试将创建一个100个字符串的数组,每个字符串包含10个字符。 基准测试比较了将100个字符串连接在一起的不同方法所花费的时间。 参见下面的代码:

    这次的结果看起来完全不同:

    屏幕截图2015-02-17 at 17.54.37

    在这里,加号方法确实遭受了损失。 每当您遍历循环时,创建StringBuilder的开销就会减少。 您可以在字节码中清楚地看到这一点:

    屏幕截图2015-02-17 at 17.59.46

    您可以看到每次执行循环时都会创建一个新的StringBuilder(第30行)。 JIT应该发现这一点并能够对其进行优化是有争议的,但是事实并非如此,使用+变得非常慢。

    同样,StringBuilder和StringBuffer的性能完全相同,但是这次它们都比String.concat()快。 String.concat()在循环的每次迭代中创建新的String所付出的代价最终会增加,并且StringBuilder变得更加高效。

    给定可以添加到此方法的所有其他功能,String.join()的效果非常好,但是,正如预期的那样,对于纯串联而言,它不是最佳选择。

    摘要

    如果要在单行代码中连接字符串,则我将使用+运算符,因为它最易读,并且对于单个调用而言,性能实际上并不重要。 还要提防String.concat(),因为您几乎肯定会需要执行空值检查 ,而其他方法则不需要这样做。

    在循环中连接字符串时,应使用StringBuilder。 您可以使用StringBuffer,但我不一定在所有情况下都信任JIT来像基准测试中那样高效地优化同步。

    我的所有结果都是使用JMH取得的,并且都带有通常的健康警告

    翻译自: https://www.javacodegeeks.com/2015/02/optimum-method-concatenate-strings-java.html

    java字符连接字符串数组

    展开全文
  • Java 定义字符串数组

    2016-05-13 17:29:00
    String[] qyidArr = null;... //定义字符串 psid2 +=","+item.getId(); //往字符串里放值用“,”隔开 if(psid2.length() > 0){ //判断如果字符串不为空,转换成字符串数组 qyidArr = psid2...

    String[] qyidArr = null;   //定义数组
    String psid2 = "";        //定义字符串

    psid2 +=","+item.getId();  //往字符串里放值用“,”隔开

    if(psid2.length() > 0){    //判断如果字符串不为空,转换成字符串数组
    qyidArr = psid2.substring(1,psid2.length()).split(",");
    }

    转载于:https://www.cnblogs.com/latter/p/5490146.html

    展开全文
  • 在android的资源文件中定义字符串数组及在代码调用方法 在array.xml设置字符串数组资源: test1 test2 test3 test1 test2 test3
    在android的资源文件中定义字符串数组及在代码中调用方法 

    在array.xml中设置字符串数组资源:



    在代码中可以如下调用:
    Java代码 复制代码 收藏代码
    1. String[] test = getResources().getStringArray(R.array.test);  


    展开全文
  • C++中定义字符串数组

    千次阅读 2015-09-01 16:31:23
    做题的时候,发现可以直接像java一样定义string类型的数组。如下 string d2S[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; 这样d2S数组就成为了一个跟map很像的东西。...

    做题的时候,发现可以直接像java一样定义string类型的数组。如下

    string d2S[10] = {"""""abc""def""ghi""jkl""mno""pqrs""tuv""wxyz"};

    这样d2S数组就成为了一个跟map很像的东西。map的key为index,value为字符串。


    展开全文
  • 创建一个长度是100的字符串数组,使用长度是2的随机字符填充该字符串数组,统计这个字符串数组里重复的字符串有多少种 本文是在java学习过程所做的一些练习,自己也是小菜鸟一枚,写出来的代码可能繁杂且不规范...
  • Java中字符串数组转long[]类型数组的方法今天项目前台传到后台的字符串经过截取后是字符串数组,但是但是我想要long类型的数组,查阅多处资料:代码块://定义字符串 String str = "1,3,6,9,4,2,1,6"; //截取字符串 ...
  • Java中字符串数组转long[]类型数组的方法 //定义字符串 String str = "1,3,6,9,4,2,1,6"; //截取字符串 String[] strArr = str.split(","); //转换long类型的数组 long[] strArrNum = ...
  • 字符串数组怎么赋值呢? 首先当然得先定义啦:String infoPack[] ; 然后想当然的以为在for循环里,new一个数组, String infoPack[i] = imgurls; 事实证明是不行滴,这样数组里面其实只有一个值,给数组...
  • Java中如何创建字符串数组

    千次阅读 2020-03-27 03:22:44
    String [] strArray = new ...注意后面的[20]是字符串数组的个数,不是字符串的长度。 不过推荐用ArrayList strArray = new ArrayList (); 比较灵活 转自:https://zhidao.baidu.com/question/407107329.html ...
  • Java二维字符串数组

    万次阅读 2015-03-09 14:50:24
    package test2; public class ArrayTwo { public static void main(String[] args) { // TODO Auto-generated method stub String array[][] = new String[3][0]; array[0] = new String[2];...
  • JAVA过滤掉字符串数组中重复的值

    千次阅读 2015-03-31 11:41:28
    String test = "aa,bb,cc,dd,bb"; String[] str = test.split(","); TreeSet tr = new TreeSet();for (int i = 0; i ; i++) {  tr.add(str[i]);...}String[] str2 = new String[tr.size()];//新定义一个
  • ![图片说明](https://img-ask.csdn.net/upload/201604/18/1460964771_211986.png) 错误是“{ expected after token ; ” 请问为什么会出现这样的错误,该怎么解决?
  • 一、字符串、字符数组和整型数组的创建 1、字符串的创建方法 1.1通过引用字符数组来创建字符串 char a[]={'A','b','c','E'}; String str1=new String(a); System.out.println(str1); 1.2先定义后赋值 ...
  • java 字符串数组

    千次阅读 2012-09-24 09:05:59
    Java字符串数组的基本操作和转换的实现! 主要是:字符和字符串的转换,字符数组和字符串的转换! 1.一维数组:  定义1:String [ ]br= new String[10]  定义2:String []br1; //一维数组  ...
  •  (2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出  (3)如:010 是对称的,3223 是对称的,123123 不是对称的  ...
  • Java字符串数组排序

    千次阅读 2019-04-22 11:10:30
    利用一个字符串数组排序讲解anonymous class,method reference以及lambda expression。后面代码体现了,inner class的lambda可以用整个outer class的field,但是必须是final类型才可以直接食用
  • Java字符串数组动态赋值

    万次阅读 2018-05-11 19:20:53
    int n = 20;String [] s = new String[n];for(int i = 0; i &lt; n; i++){ s[i] = String.valueOf(i);};
  • Java字符串数组转集合方法

    千次阅读 2020-11-07 15:09:52
    //定义一个字符串 String zhuan = "1,2,3,4,5,6,7,8,9"; //分割字符串 String[] split = zhuan.split(","); // 把数组转成集合 List<String> stringList = Arrays.asList(split); //输出结果 S
  • /*这是一个静态函数,不用声明对象就可以用的,如你的类名为Test,在任何情况下都可以.../*此方法有两个参数,第一个是要查找的字符串数组,第二个是要查找的字符或字符串  * */  for(int i=0;i if(strs[i].indexO
  • java二维数组字符数组Today we will look into Two-dimensional array in java. An array is like a container that can hold a certain number of values. 今天,我们将研究Java中的二维数组数组就像可以容纳...
  • java字符串数组转List<Integer>

    千次阅读 2019-01-23 11:49:36
    java字符串数组转List 欢迎使用Markdown编辑器 String idsStringList = “1,2,3,4,5”; List idsList = new ArrayList&lt;&gt;(); if(StringUtils.isNotBlank(menuIdStr)){ List idsStringList = Arrays....
  • JNI C创建Java字符串数组

    千次阅读 2017-07-31 11:08:38
    创建Java字符串数组注:jni没有与String[]对应的数据类型,所以需要创建对象数组,循环添加jstring对象#include #include #include #define ARRAY_LENGTH 5 JNIEXPORT jobjectArray JNICALL J
  • 转自:http://www.pinlue.com/article/2020/10/0504/0111276021425.html
  • java string什么是字符串常量,什么是字符串数组,什么是字符串常量池?
  •  在C语言中字符串和字符数组基本上没有区别,都需要结束符;如:char s[4]={'a','b','c','d'};此字符数组定义编译可以通过,但却没有关闭数组,若其后需要申请内存,那么以后的数据均会放入其中,尽管它的...
  • 对于字符串数组的大小排序,首先需要做的就是比较两个字符串的大小,如果直接使用>或<等符号比较字符串的大小,会直接报出错误:The operator > is undefined for the argument type(s) java.lang.String, ...
  • Java字符串数组初始化和赋值

    万次阅读 2017-04-29 09:10:37
    原文地址:...//一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","
  • C/C++ Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V . 字符串转换 ( jstring -> char* ) VI . 字符串释放 VII . 部分代码示例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 314,933
精华内容 125,973
关键字:

java中定义字符串数组

java 订阅