精华内容
下载资源
问答
  • Java 数组

    2016-02-04 14:38:38
    Java数组声明、创建、初始化 Java数组的声明、创建和初始化,并给出其对应的代码。 一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中...

    Java数组声明、创建、初始化



    Java数组的声明、创建和初始化,并给出其对应的代码。


    一维数组的声明方式:
    type var[]; 或type[] var;


    声明数组时不能指定其长度(数组中元素的个数),


    Java中使用关键字new创建数组对象,格式为:
    数组名 = new 数组元素的类型 [数组元素的个数]


    实例:
    TestNew.java:


    程序代码:


    public class TestNew  
    {  
         public static void main(String args[]) {  
             int[] s ;  
             int i ;  
             s = new int[5] ;  
             for(i = 0 ; i < 5 ; i++) {  
                 s[i] = i ;  
             }  
             for(i = 4 ; i >= 0 ; i--) {  
                 System.out.println("" + s[i]) ;  
             }  
         }   



    初始化:


    1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
    2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
    3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
    实例:




    TestD.java(动态):


    程序代码:


    public class TestD  
    {  
         public static void main(String args[]) {  
             int a[] ;  
             a = new int[3] ;  
             a[0] = 0 ;  
             a[1] = 1 ;  
             a[2] = 2 ;  
             Date days[] ;  
             days = new Date[3] ;  
             days[0] = new Date(2008,4,5) ;  
             days[1] = new Date(2008,2,31) ;  
             days[2] = new Date(2008,4,4) ;  
         }  
    }  
     
    class Date  
    {  
         int year,month,day ;  
         Date(int year ,int month ,int day) {  
             this.year = year ;  
             this.month = month ;  
             this.day = day ;  
         }  
    }  
     


    TestS.java(静态):


    程序代码:


    public class TestS     
    {     
         public static void main(String args[]) {     
             int a[] = {0,1,2} ;     
             Time times [] = {new Time(19,42,42),new Time(1,23,54),new Time(5,3,2)} ;     
         }     
    }     
     
    class Time     
    {     
         int hour,min,sec ;     
         Time(int hour ,int min ,int sec) {     
             this.hour = hour ;     
             this.min = min ;     
             this.sec = sec ;     
         }     
    }    


    TestDefault.java(默认):


    程序代码:


    public class TestDefault     
    {     
         public static void main(String args[]) {     
             int a [] = new int [5] ;     
             System.out.println("" + a[3]) ;     
         }     
    }   


    ==========


     Java 数组操作的 12 个方法



    1.  声明


    Java代码 
    String[] aArray = new String[5];  
    String[] bArray = {"a","b","c", "d", "e"};  
    String[] cArray = new String[]{"a","b","c","d","e"};  




    2.  输出


    Java代码 
    int[] intArray = { 1, 2, 3, 4, 5 };  
    String intArrayString = Arrays.toString(intArray);  
       
    // print directly will print reference value  
    System.out.println(intArray);  
    // [I@7150bd4d  
       
    System.out.println(intArrayString);  
    // [1, 2, 3, 4, 5]  




    3.  从一个数组创建数组列表 




    Java代码 
    String[] stringArray = { "a", "b", "c", "d", "e" };  
    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  
    System.out.println(arrayList);  
    // [a, b, c, d, e]  




    4.  检查一个数组是否包含某个值 




    Java代码 
    String[] stringArray = { "a", "b", "c", "d", "e" };  
    boolean b = Arrays.asList(stringArray).contains("a");  
    System.out.println(b);  
    // true  




    5.  连接两个数组 


    Java代码 
    int[] intArray = { 1, 2, 3, 4, 5 };  
    int[] intArray2 = { 6, 7, 8, 9, 10 };  
    // Apache Commons Lang library  
    int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);  




    6.  声明一个内联数组(Array inline) 




    Java代码 
    method(new String[]{"a", "b", "c", "d", "e"});  




    7.  把提供的数组元素放入一个字符串 




    Java代码 
    // containing the provided list of elements  
    // Apache common lang  
    String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");  
    System.out.println(j);  
    // a, b, c  




    8.  将一个数组列表转换为数组 


    Java代码 
    String[] stringArray = { "a", "b", "c", "d", "e" };  
    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  
    String[] stringArr = new String[arrayList.size()];  
    arrayList.toArray(stringArr);  
    for (String s : stringArr)  
        System.out.println(s);  




    9.  将一个数组转换为集(set) 




    Java代码 
    Set<String> set = new HashSet<String>(Arrays.asList(stringArray));  
    System.out.println(set);  
    //[d, e, b, c, a]  




    10.  逆向一个数组 


    Java代码 
    int[] intArray = { 1, 2, 3, 4, 5 };  
    ArrayUtils.reverse(intArray);  
    System.out.println(Arrays.toString(intArray));  
    //[5, 4, 3, 2, 1]  




    11.  移除数组中的元素 


    Java代码 
    int[] intArray = { 1, 2, 3, 4, 5 };  
    int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array  
    System.out.println(Arrays.toString(removed));  




    12.  将整数转换为字节数组 


    Java代码 
    byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();  
       
    for (byte t : bytes) {  
       System.out.format("0x%x ", t);  
    }  

    展开全文
  • //发送字符串信息的 byte数组 ByteBuffer bf=ByteBuffer.wrap(resultStr.getBytes("utf-8")); session.getBasicRemote().sendBinary(bf); //发送字符串 //session.getBasicRemote().sendText("测试"); } catch...
  • 前言:今天看视频敲代码学习UDP时,出现了输出乱码的问题,我们往下看 ...需要连接服务器,如果服务器没启动,客户端直接运行,会报错(ConnectException),相当于打电话,两者要同时在线。(三次握手,四次挥手)

    前言:今天看视频敲代码学习UDP时,出现了一些类型转换问题,我们往下看


    代码一如下:

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    //UDP:不需要等服务器启动才运行,直接运行客户端不会报错,相当于发短信
    /*
    TCP:
    需要连接服务器,如果服务器没启动,客户端直接运行,会报错(ConnectException),相当于打电话,两者要同时在线。(三次握手,四次挥手)
    */
    public class UDPClientDemo01 {
        public static void main(String[] args) throws  Exception{
            //1.建立一个Socket
            DatagramSocket socket = new DatagramSocket();
            //2.建立一个包
            String msg = "你好啊,服务器";
            InetAddress localhost = InetAddress.getLocalHost();
            int port = 9000;
            //数据,数据的长度起始,发送给谁
            DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.length(),localhost,port);
            //3.发送包
            socket.send(packet);
            //4.关闭流
            socket.close();
        }
    }
    

    代码二如下:

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    //需要等待客户端的连接
    public class UDPServerDemo01 {
        public static void main(String[] args) throws Exception {
            //开放端口
            DatagramSocket socket = new DatagramSocket(9000);
            //接收数据
            byte[] buffer = new byte[1024];
            DatagramPacket packet1 = new DatagramPacket(buffer,0,buffer.length);
    
            socket.receive(packet1);//阻塞接收
            System.out.println(new String(packet1.getData(),0,packet1.getLength()));
            //关闭流
            socket.close();
        }
    }
    

    我们先运行代码2,在运行代码1,代码2的控制台显示如下结果:

    你好�


    "你好"后面出现了乱码现象,我当即反应是去查看编译器有没有设置utf-8编码,查了下,编译器设置了utf-8编码,花了十分钟左右才找到问题,在代码1的下面这句代码出现了问题。


     DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.length(),localhost,port);
    

    这是因为String类型转换成byte类型数组时字节数的问题

    我们在代码1输出一下两者的长度
    代码如下:
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    public class UDPClientDemo01 {
        public static void main(String[] args) throws  Exception{
            //1.建立一个Socket
            DatagramSocket socket = new DatagramSocket();
            //2.建立一个包
            String msg = "你好啊,服务器";
            InetAddress localhost = InetAddress.getLocalHost();
            int port = 9000;
            //输出转换成byte数组的长度
            System.out.println(msg.getBytes().length);
            //输出String的长度
            System.out.println(msg.length());
            //数据,数据的长度起始,发送给谁
            DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.length(),localhost,port);
            //3.发送包
            socket.send(packet);
            //4.关闭流
            socket.close();
        }
    }
    
    
    结果:

    19

    7


    为什么String类型转换成byte类型数组,长度由7变19呢?原因如下:

    英文字母和中文汉字在不同字符集编码下的字节数
    英文字母:

    字节数 : 1;编码:GB2312

    字节数 : 1;编码:GBK

    字节数 : 1;编码:GB18030

    字节数 : 1;编码:ISO-8859-1

    字节数 : 1;编码:UTF-8

    字节数 : 4;编码:UTF-16

    字节数 : 2;编码:UTF-16BE

    字节数 : 2;编码:UTF-16LE

    中文汉字:

    字节数 : 2;编码:GB2312

    字节数 : 2;编码:GBK

    字节数 : 2;编码:GB18030

    字节数 : 1;编码:ISO-8859-1

    字节数 : 3;编码:UTF-8

    字节数 : 4;编码:UTF-16

    字节数 : 2;编码:UTF-16BE

    字节数 : 2;编码:UTF-16LE

    看到这里,我们大概能明白了,代码1的字符串中有六个汉字和一个逗号,刚好长度为7,转换成byte数组时,因为是utf-8编码,一个汉字对应3个字节,所以19=3*6+1。我们下面这个代码,用的是字符串的长度,起始位置从0到7,而转换成byte类型数组是的长度为19,这就意味着7到19的数据没有读到,读到了"你好"6个字节加上一个字节的乱码,如果增加两个字节(即读取0到9),则控制台会输出"你好啊"。

     DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.length(),localhost,port);
    

    我们只要将代码改成这样就不会出现乱码问题了:

    DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
    

    展开全文
  • Java 任意长度byte数组转换为int数组

    千次阅读 2015-10-09 19:40:31
    Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。 总所周知,int类型数据在Java中占据32 bit,byte占据8 bit,这样的话,正常情况下4个byte可以转换...

    嗯。最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了。撒花。

    Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。

    总所周知,int类型数据在Java中占据32 bit,byte占据8 bit,这样的话,正常情况下4个byte可以转换成一个int类型数据。

    当然,不正常情况下,3个byte或者2个byte甚至1个byte都可以转换为int数据,只需要高位补上就行。

    嗯,坑来了。由于Java中int类型是有符号的,最高位为符号位,为0的话表示正数,为1的话表示负数。

    以四位byte数组为例,要拼接成一个32 bit的int数据的话,只需要将四个byte按顺序连接起来就行,这样的话,就需要对四个byte进行移位操作。

    第一位左移24位,第二位左移16位,第三位左移8位,第四位不动。。然后进行或运算。。

    嗯,看起来好像完美。。。然而之前说过Java是有符号的,对于后三个byte,如果是负数的话,则高位都是1,这样高位的或运算将失效,前面的byte数据也就没有意义。

    因此,对于后三个byte数据,进行移位操作前需要和0XFF进行与运算,消除高24位。

    代码如下

    public int bytesToInt(byte[] bytes){
            return bytes[0]<<24|(bytes[1]&0xff)<<16|(bytes[2]&0xff)<<8|(bytes[3]&0xff);
        }
    对于不正常的情况,比如3个byte转换为int,则第一个左移16位,第二位与0xff后左移8位,第三位与0xff,然后进行或运算即可。

    同理可运用于2个byte。

    对于1个byte,直接强制转换为int即可。

    嗯。。大概就是这样,第一位移位,之后的分别和0xff相与后再移位,最后进行或运算即可。

    后来,闲着无聊,如果一个byte数组超过4位后,怎么办?当然返回一个int数组就行啦,反正4位byte转换成1个int,看着办就行。

    public int[] bytesToInts(byte[] bytes){
            int bytesLength=bytes.length;
            int[] ints=new int[bytesLength%4==0? bytesLength/4:bytesLength/4+1];
            int lengthFlag=4;
            while (lengthFlag<=bytesLength){
                ints[lengthFlag/4-1]=(bytes[lengthFlag-4]<<24)|(bytes[lengthFlag-3]&0xff)<<16|
                        (bytes[lengthFlag-2]&0xff)<<8|(bytes[lengthFlag-1]&0xff);
                lengthFlag+=4;
            }
            for (int i=0;i<bytesLength+4-lengthFlag;i++){
                if (i==0) ints[lengthFlag/4-1]|=bytes[lengthFlag-4+i]<<8*(bytesLength+4-lengthFlag-i-1);
                else ints[lengthFlag/4-1]|=(bytes[lengthFlag-4+i]&0xff)<<8*(bytesLength+4-lengthFlag-i-1);
            }
            return ints;
        }
    嗯。。有空再来写写Java的bit提取。。

    展开全文
  • java 数组

    2014-12-29 11:08:40
    -------------------------------------------------------------------------------------...1. 声明一个数组  Java代码  String[] aArray = new String[5];  String[] bArray = {"a","b














    ----------------------------------------------------------------------------------------------------

    1.  声明一个数组 

    Java代码 
    1. String[] aArray = new String[5];  
    2. String[] bArray = {"a","b","c""d""e"};  
    3. String[] cArray = new String[]{"a","b","c","d","e"};  


    2.  输出一个数组 

    Java代码 
    1. int[] intArray = { 12345 };  
    2. String intArrayString = Arrays.toString(intArray);  
    3.    
    4. // print directly will print reference value  
    5. System.out.println(intArray);  
    6. // [I@7150bd4d  
    7.    
    8. System.out.println(intArrayString);  
    9. // [1, 2, 3, 4, 5]  


    3.  从一个数组创建数组列表 


    Java代码 
    1. String[] stringArray = { "a""b""c""d""e" };  
    2. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  
    3. System.out.println(arrayList);  
    4. // [a, b, c, d, e]  


    4.  检查一个数组是否包含某个值 


    Java代码 
    1. String[] stringArray = { "a""b""c""d""e" };  
    2. boolean b = Arrays.asList(stringArray).contains("a");  
    3. System.out.println(b);  
    4. // true  


    5.  连接两个数组 

    Java代码 
    1. int[] intArray = { 12345 };  
    2. int[] intArray2 = { 678910 };  
    3. // Apache Commons Lang library  
    4. int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);  


    6.  声明一个内联数组(Array inline) 


    Java代码 
    1. method(new String[]{"a""b""c""d""e"});  


    7.  把提供的数组元素放入一个字符串 


    Java代码 
    1. // containing the provided list of elements  
    2. // Apache common lang  
    3. String j = StringUtils.join(new String[] { "a""b""c" }, ", ");  
    4. System.out.println(j);  
    5. // a, b, c  


    8.  将一个数组列表转换为数组 

    Java代码 
    1. String[] stringArray = { "a""b""c""d""e" };  
    2. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  
    3. String[] stringArr = new String[arrayList.size()];  
    4. arrayList.toArray(stringArr);  
    5. for (String s : stringArr)  
    6.     System.out.println(s);  


    9.  将一个数组转换为集(set) 


    Java代码 
    1. Set<String> set = new HashSet<String>(Arrays.asList(stringArray));  
    2. System.out.println(set);  
    3. //[d, e, b, c, a]  


    10.  逆向一个数组 

    Java代码 
    1. int[] intArray = { 12345 };  
    2. ArrayUtils.reverse(intArray);  
    3. System.out.println(Arrays.toString(intArray));  
    4. //[5, 4, 3, 2, 1]  


    11.  移除数组中的元素 

    Java代码 
    1. int[] intArray = { 12345 };  
    2. int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array  
    3. System.out.println(Arrays.toString(removed));  


    12.  将整数转换为字节数组 

    Java代码 
    1. byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();  
    2.    
    3. for (byte t : bytes) {  
    4.    System.out.format("0x%x ", t);  
    5. }  



    展开全文
  • Java数组技巧

    2013-09-30 10:19:30
    本文分享了关于Java数组最顶级的11大方法,帮助你解决工作流程问题,无论是运用在团队环境或是在私人项目中,你都可以直接拿来用!  0. 声明一个数组(Declare an array)  1 2 3 ...
  • Java数组操作

    2015-06-12 15:58:45
    下面是精心整理的Java数组操作的10大方法,大部分代码都来自Stack Overflow。 http://www.codeceo.com/article/10-java-array-method.html 0、定义一个Java数组 String[] aArray = new String[5]; String[]...
  • java 合并两个byte数组

    2017-09-15 10:22:51
    //java 合并两个byte数组   public static byte[] byteMerger(byte[] byte_1, byte[] byte_2){   byte[] byte_3 = new byte[byte_1.length+byte_2.length];   System.arraycopy(byte_1, 0, ...
  • JAVA数组

    千次阅读 2008-03-24 11:39:00
    java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。 ★ 一维数组 1. ...
  • JAVA数组

    2007-12-24 17:16:00
    java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。 ★ 一维数组 1. ...
  • Java数组的一些用法

    2017-03-28 11:15:42
    下面是精心整理的Java数组操作的10大方法,大部分代码都来自Stack Overflow。 0、定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new ...
  • java数组操作工具类

    千次阅读 2014-09-02 09:56:58
    java数组操作工具类 源代码下载地址:http://www.zuidaima.com/share/1550463350262784.htm
  • byte数组拼接

    2021-06-17 11:10:03
    * 拼接byte数组 * @param data1 * @param data2 * @return 拼接后数组 */ public static byte[] addBytes(byte[] data1, byte[] data2) { byte[] data3 = new byte[data1.length + data2.length]; ...
  • JAVA数组详解

    2015-01-28 18:32:22
    java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。  ★ 一维数组  ...
  • java数组常用操作

    2017-10-24 09:16:47
    1. 声明一个数组 Java代码 String[] aArray = new String[5];  String[] bArray = {“a”,”b”,”c”, “d”, “e”};  String[] cArray = new String[]{“a”,”b”,”c”,”d”,”e”}; 2. ...
  • Java数组应用十大技巧攻略

    千次阅读 2013-09-17 09:28:30
    Java数组应用十大技巧攻略  The following are top 10 methods for Java Array. They are the most voted questions from stackoverflow. (关于Java数组最顶级的11大应用方法,这些方法在工作流程问题中经常会用到...
  • 转载自码农网 ... 英文原文:Top 10 Methods for Java Arrays 翻译作者:码农网 – 小峰 ...下面是精心整理的Java数组操作的10大方法,大部分代码都来自Stack Overflow。 0、定义一个Java数组 String
  • Java数组操作集合

    2015-11-30 21:25:19
    0、定义一个Java数组 String[] aArray = newString[5]; String[] bArray ={"a","b","c", "d", "e"}; String[] cArray = newString[]{"a","b","c","d","e"}; 第一种是定义了一个数组,并且指定了数组的长度,我们...
  • Java数组使用总结

    2017-06-07 10:20:22
     Java 数组初始化的两种方法:  静态初始化: 程序员在初始化数组时为数组每个元素赋值;  动态初始化: 数组初始化时,程序员只指定数组的长度,由系统为每个元素赋初值。 //静态初始化数组:方法一 ...
  • 下面是精心整理的Java数组操作的10大方法,大部分代码都来自Stack Overflow。 0、定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new ...
  • Java数组操作十大方法

    2014-10-31 20:13:30
    0、定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a","b","c","d","e"}; 第一种是定义了一个数组,并且指定了数组的长度,...
  • java数组的使用

    千次阅读 2016-03-05 21:19:57
    下面是stackoverflow中关于数组方法的相关问题中,获得最多...Java代码  String[] aArray = new String[5];  String[] bArray = {"a","b","c", "d", "e"};  String[] cArray = new String[]{
  • java数组使用技巧

    千次阅读 2013-10-10 11:27:43
    参考网上文章,总结了一下java数组使用技巧,如下: package com.boco.array; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.apache....
  • Java数组技巧攻略

    2013-09-28 11:20:58
    0. 声明一个数组(Declare an array) String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a","b","c","d...1. 在Java中输出一个数组(Print an array i

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,446
精华内容 36,178
关键字:

bytejava数组连接

java 订阅