Java中String接受的最大字符串的长度是多少
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中String接受的最大字符串的长度是多少相关的知识,希望对你有一定的参考价值。
数组最大的长度为Integer.MAX_VALUE
1.不过,我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串,那么双引号里面的ASCII字符最多只能有 65534 个。
2.因为在class文件的规范中, CONSTANT_Utf8_info表中使用一个16位的无符号整数来记录字符串的长度的,最多能表示 65536个字节,而java class 文件是使用一种变体UTF-8格式来存放字符的,null值使用两个字节来表示,因此只剩下 65536- 2 = 65534个字节。
3.也正是变体UTF-8的原因,如果字符串中含有中文等非ASCII字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。
参考技术A String类型的长度为320339960,其最大容量不超过1个G。 参考技术B 我们可以使用串接操作符得到一个长度更长的字符串,那么,String对象最多能容纳多少字符呢?查看String的源代码我们可以得知类String中是使用域 count 来记录对象字符的数量,而count 的类型为 int,因此,我们可以推测最长的长度为 2^32,也就是4G。
不过,我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串,那么双引号里面的ASCII字符最多只能
有 65534 个。为什么呢?因为在class文件的规范中, CONSTANT_Utf8_info表中使用一个16位的无符号整数来记录字符串的长
度的,最多能表示 65536个字节,而java class 文件是使用一种变体UTF-8格式来存放字符的,null值使用两个字节来表示,因此只剩
下 65536- 2 = 65534个字节。也正是变体UTF-8的原因,如果字符串中含有中文等非ASCII字符,那么双引号中字符的数量会更少(一
个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错本回答被提问者采纳 参考技术C 最多65536长度。因为String里面实际上是一个char[],数组最大的长度为Integer.MAX_VALUE,
也就是65536
字符串(string.cpp)
字符串(string.cpp)
神TM字符串DP
题目描述:
小林和亮亮正在做一个游戏。小林随意的写出一个字符串,字符串仅由大写字母组成,然后指定一个非负整数m,亮亮可以进行至多m次操作。每次操作为交换相邻的两个字符。亮亮的目标是使得操作后的字符串出现最长相同的字符的长度最大。你的任务是计算这个最大长度是多少。
样例输入:
ABCCDCDDC
4
样例输出:
4
思路:
设置一个字符串长度x26大小的二维数组,对于字符串中的每个字母,记录其出现的位置,将对应的矩阵元素设置为1,其余元素为0,然后按列优先遍历矩阵,将每个字母出现的位置下标记录到一个数组里,计算将i和j之间的相同元素全部移动到一起需要的最小移动次数,在这个最小次数满足满足约束条件的前提下,筛选出最大的连续字母的个数。最后比较所有字母的最大连续个数,输出其中的最大值即可。
CODE:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define N 26
#define M 5050
using namespace std;
string s;
int a[M][N],m;//a是矩阵,出现字母的地方都置1
int f[M],num[M]; //f[i]是存放各字母在满足约束的情况下最大的连续数
int dp(int i , int j , int*a) {
if(i == j) return 0;
else if(i + 1 == j) return a[j] - a[i] - 1;
else return dp(i + 1 , j - 1 , a) + a[j] - a[i] - (j - i);
}
inline void init() {
memset(a,0,sizeof(a) );
memset(f,0,sizeof(f) );
memset(num,0,sizeof(num) );
}
inline void open_judge() {
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
}
int main() {
//open_judge();
cin>>s;
scanf("%d",&m);
init();
int len = s.length();
for(int i = 0 ; i < len ; i++) {
for(int j = 0 ; j < 26 ; j++) {
a[i][s[i] - 'A'] = 1;
}
}
for(int j = 0 ; j < 26 ; j++) {
int k = 0;
for(int i = 0 ; i < len;i++) {
if(a[i][j] == 1) num[k++] = i;
}
if(k == 1) f[j] = 1;
else {
int temp = -1;
for(int i = 0 ; i < k ; i++) {
for(int l = i + 1 ; l < k ; l++) {
if( dp(i , l , num) <= m ) {
if((l - i) + 1 > temp)
temp = (l - i) + 1;
}
}
}
f[j] = temp;
}
}
sort(f , f + N);
printf("%d
",f[N-1]);
return 0;
}
以上是关于Java中String接受的最大字符串的长度是多少的主要内容,如果未能解决你的问题,请参考以下文章